- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想我在 RealmSwift 中偶然发现了一些未定义的行为。
Dog 类中的“backReferences”属性定义如下:
let backReferences = LinkingObjects(fromType: Person.self, property: "dogs")
我创建了两个对象,其中 person 是 dog 的父对象:
self.realm = try! Realm()
let person = Person()
person.firstName = "Paul"
person.secondName = "Brewczynski"
let dog = Dog()
dog.name = "MyDogName"
person.dogs.append(dog) // Right now this dog is mine
然后:
//print("BackReferebces print #0 - on yet unmanaged realm Object")
//print(dog.backReferences)
try! realm!.write {
realm?.add(person) // Writing person to db, with dog reference
print("BackReferences print #1")
print(dog.backReferences)
}
print("BackReferences print #2")
print("Show backReferences in using my orginal reference to dog \(dog.backReferences)")
print("BackReferences print #3")
print("Show backReferences using Persons's reference \(person.dogs.first!.backReferences)")
它完美地工作(正确打印对 Person holding dog 的反向引用)直到你取消注释 2 第一行,并在它被 Realm 管理之前打印 dog 的 backReference。
然后在 print #1 和 #2 中我得到空列表:
BackReferences print #1
LinkingObjects<> <0x7fa0d1611c00> (
)
BackReferences print #2
Show backReferences in using my orginal reference to dog LinkingObjects<> <0x7fa0d1611c00> (
)
为什么会这样?我是否偶然发现了某些 Realm 的未定义行为?
整个 AppDelegate 文件:
https://gist.github.com/pbrewczynski/8ebc3cb5796850008a90f79dbee6bd04
最佳答案
这似乎是预期的行为。尽管这在任何地方都没有准确记录,但在 this 中GitHub issue 一位 Realm 工程师提到了
LinkingObjects
always returns an empty collection for unmanaged objects.
我能在 documentation 中找到的唯一提示是句子
LinkingObjects
always reflects the current state of the Realm on the current thread,
但是,对于只有托管对象是 Realm
的一部分这一事实并没有真正明确,因此非托管对象不能成为 Realm
状态的一部分在当前线程上。
总而言之,您始终需要在 Realm
中持久化对象,然后它们的 LinkingObjects
属性才能按预期工作。
关于ios - 在保存到 Realm 数据库之前发生打印时,LinkObjects 属性被清空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45561256/
我想我在 RealmSwift 中偶然发现了一些未定义的行为。 Dog 类中的“backReferences”属性定义如下: let backReferences = LinkingObjects(f
我是一名优秀的程序员,十分优秀!