2017-08-08 21 views
2

我想我偶然發現了RealmSwift中的一些未定義的行爲。LinkObjects屬性在保存到Realm數據庫之前發生打印時清空

在狗類中的 「反向引用」 屬性被定義這樣:

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的未定義行爲?

整體的AppDelegate文件:

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

回答

1

這似乎是預期的行爲。雖然這是不完全記錄任何地方,在this GitHub的問題一個境界工程師提到,

LinkingObjects始終返回非託管對象的空集合。

的唯一提示這個我能找到documentation是句子

LinkingObjects總是反映當前線程的境界的當前狀態,

然而,這ISN」對於只有託管對象是Realm的一部分這一事實才真正明確,因此非託管對象不能在當前線程上成爲Realm狀態的一部分。

總而言之,您始終需要在Realm之前堅持對象,然後才能按其預期的方式運行LinkingObjects屬性。

相關問題