请解释一下你的行为。
如果我想使用领域更新一些数据,我必须这样做:
let realm = try! Realm()
let theDog = realm.objects(Dog.self).filter("age == 1").first
try! realm.write {
theDog!.age = 3
}
}但是如果我这样做会发生什么呢:theDog!.age = 3?theDod数据会不同步吗?以后如何更新此元素?
try! realm.write {
//what I have to write here?
}是否有任何方法强制同步每个元素更改?如果武力同步存在,是否有任何缺点?
发布于 2016-10-15 08:00:05
请原谅我的斯威夫特,如果我搞砸了,我对语法不太熟悉。
虽然我知道这是示例代码,但实际上我不太喜欢它。
let realm = try! Realm()
let theDog = realm.objects(Dog.self).filter("age == 1").first
try! realm.write {
theDog!.age = 3
}
}查询应该在事务块中,以确保您正在修改对象的最新版本。
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中进行更改。
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
}我认为你所说的“力量同步”是领域的一个主要特征。
https://stackoverflow.com/questions/40056464
复制相似问题