首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >领域数据同步

领域数据同步
EN

Stack Overflow用户
提问于 2016-10-15 07:42:14
回答 1查看 882关注 0票数 0

请解释一下你的行为。

如果我想使用领域更新一些数据,我必须这样做:

代码语言:javascript
复制
let realm = try! Realm()
  let theDog = realm.objects(Dog.self).filter("age == 1").first
  try! realm.write {
    theDog!.age = 3
  }
}

但是如果我这样做会发生什么呢:theDog!.age = 3?theDod数据会不同步吗?以后如何更新此元素?

代码语言:javascript
复制
try! realm.write {
//what I have to write here?
  }

是否有任何方法强制同步每个元素更改?如果武力同步存在,是否有任何缺点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-15 08:00:05

请原谅我的斯威夫特,如果我搞砸了,我对语法不太熟悉。

虽然我知道这是示例代码,但实际上我不太喜欢它。

代码语言:javascript
复制
let realm = try! Realm()
  let theDog = realm.objects(Dog.self).filter("age == 1").first
  try! realm.write {
    theDog!.age = 3
  }
}

查询应该在事务块中,以确保您正在修改对象的最新版本。

代码语言:javascript
复制
let realm = try! Realm()
  try! realm.write {
    let theDog = realm.objects(Dog.self).filter("age == 1").first
    theDog!.age = 3
  }
}

现在,我认为您的问题是为什么需要realm.write {。这是因为您只能在事务中修改托管RealmObjects。

事务是必需的,以确保特定线程的领域实例被切换到“写模式”,并且在给定的时间内只能在“写模式”中有一个领域实例。因此,由给定的领域实例看到的版本将始终保持一致,并且不会改变--只有当领域将自身同步到新版本时才会改变。

这就是王国的设计方法,这样您就可以在后台线程上轻松地创建新版本的领域,然后自动同步到其他领域实例。

当事务提交时,当发生此更改时,将消息发送给其他线程(如果它们可以接收消息,无论如何-无论如何需要一个事件循环,例如UI线程有一个事件循环),通知这些线程上的领域实例更新自己;并调用所有结果集和托管RealmObjects的所有更改侦听器,以指示它们已经过更新(如果它们与此事务一起更改)。

因此,要回答您的问题,您更改的属性将在属于同一对象的所有RealmObjects中进行更改。

代码语言:javascript
复制
let realm = try! Realm()
  let originalDog = realm.objects(Dog.self).filter("age == 1").first
  try! realm.write {
    let theDog = realm.objects(Dog.self).filter("age == 1").first
    theDog!.age = 3
  }
  // assuming there is only 1 dog with age==1, 
  // originalDog!.age will be 3
}

我认为你所说的“力量同步”是领域的一个主要特征。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40056464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档