LinkObjects 属性在保存到 Realm 数据库之前进行打印时会被清空



我想我在 RealmSwift 中偶然发现了一些未定义的行为。

Dog 类中的 "backReferences" 属性定义如下:

let backReferences = LinkingObjects(fromType: Person.self, property: "dogs")

我创建了两个对象,其中人是狗的父母:

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)")

它运行良好(正确打印对抱狗的人的反向引用(,直到您取消注释 2 首行,并在 Realm 管理之前打印狗的反向引用。

然后在打印 #1 和 #2 中,我得到空列表:

BackReferences print #1
LinkingObjects<> <0x7fa0d1611c00> (
)
BackReferences print #2
Show backReferences in using my orginal reference to dog LinkingObjects<> <0x7fa0d1611c00> (
)

为什么会这样?我是否偶然发现了某些 Realm 的未定义行为?

整个应用程序委托文件:

https://gist.github.com/pbrewczynski/8ebc3cb5796850008a90f79dbee6bd04

这似乎是预期的行为。尽管这在任何地方都没有完全记录,但在这个 GitHub 问题中,一位 Realm 工程师提到

LinkingObjects始终返回非托管对象的空集合。

我在文档中能找到的唯一提示是句子

LinkingObjects始终反映当前线程上 Realm 数据库的当前状态,

但是,这并没有真正明确说明只有托管对象是Realm的一部分,因此非托管对象不能成为当前线程上Realm状态的一部分。

总而言之,您始终需要在Realm中持久化对象,然后它们的LinkingObjects属性才能按预期工作。

最新更新