ios - 在保存到 Realm 数据库之前发生打印时,LinkObjects 属性被清空

标签 ios swift realm

我想我在 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/

相关文章:

ios - 检查特定用户名是否存在于 KeyChain 如果不存在则使用密码 ios objective-c 存储新用户

iphone - 检查 NavigationStack 是否包含 View Controller 错误

ios - Xcode7 - 等高乘数约束导致约束冲突

android - 如何将 RealmResults<Object> 转换为 List<Object>

ios - IOS 中的 Realm : Primary key can't be changed after an object is inserted

ios - Xcode 10 - UITests - 原因 : image not found

ios - 自定义委托(delegate)返回 nil 值

swift - SpriteKit - 如何检查 SKNode 之间的交叉点?

ios - UIImagePickerController 关闭后,UICollectionView 不会重新加载数据()

swift - 在 Realm 中查询匹配的数组属性