2017-04-10 114 views
0

我在我的iOS項目中使用Swift的Realm。分配對象時的領域錯誤

我有一個Realm對象,它反過來包含對其他Realm對象的引用。我注意到一些奇怪的行爲,其中設置參考如下會導致主鍵錯誤:

Terminating app due to uncaught exception 'RLMException', 
reason: 'Can't create object with existing primary key value '35834'.' 

什麼奇怪的是,我只是設置一個參考。我有兩個對象(ObjectA和ObjectB),每個對象都有自己的主鍵。

public class ObjectA: Object{ 
    dynamic public var objectReference:ObjectB? 

當我這樣做的第一次與該objectReference它工作正常。就在我用相同的objectReference進行後續更新時,它似乎出錯了。

如果我第一次打電話給對象添加更新:真正的事情是可以的,但感覺哈克。也許這是正確的路要走?或者也許我已經錯過了與Realm的一點。是否將對象分配給另一個對象試圖將對象添加到Realm?

謝謝

回答

0

這取決於您使用哪個API寫入Realm。使用realm.add(_:update:)update設置爲false將始終嘗試將該對象添加爲該對象和任何子對象的新副本。如果你有一個主鍵,它會觸發你在上面看到的異常。如果您沒有主鍵,它會添加該對象的整個第二個副本(您可能不需要)。

realm.add(_:update: true)的要點主要針對REST API模式,您可能需要不斷更新服務器中的對象,而Realm可以在第一次智能地將對象添加到數據庫中,然後在隨後的調用中更新該對象。

如果兩個對象都是已經境界,你知道你並不需要一個插件或更新邏輯,它可能更適合於直接分配子對象,而不是使用add API的:

let realm = try! Realm() 

let parentObject: ObjectA = ... 
let childObject: ObjectB = ... 

try! realm.write { 
    parentObject.objectReference = childObject 
} 
+1

感謝您的回答。事實證明,問題在於,我在分配它之前將ObjectB存儲在Realm中。這是第一次完成任務,但是在任何時候對象被分配後,它都會拋出異常。有道理的方式 – James