2016-05-13 32 views
0

是否可以通過僅傳遞關係的ID來更新Realm對象的關係?更新領域ID與主界面的關係

如果我有一個Library類具有List<Books>的關係,我想合併兩個Libraries在一起,我會假設可以做這樣的:

​​

然後我用ObjectMapper & SugarRecord:

let changes = ["books": bookIds] 
Mapper<T>().map(changes, toObject: secondLibrary) 
let realm = self.realm 
realm.add(secondLibrary, update: true) 

但書本列表未更新。 我認爲這是因爲ObjectMapper不知道任何關於主ID的事情,因此試圖將它們映射到一個對象中並沒有任何作用。

Realm是否有能力通過主ID進行更新?如果是這樣,我很樂意重寫我的持久性堆棧。

+0

您發佈的代碼有點不清楚。您的第二個代碼片段根本不會引用對象標識,並且引用了許多不同的變量,這些變量的類型在上下文中不明顯。你能否提供更多關於你的模型是什麼樣子的細節,以及你想要做什麼? – bdash

回答

1

以供將來參考:一個解決辦法,將其上this Github issue所討論的,是修改對象創建代碼在例如作爲這類:

let books = ["1", "2"].map { realm.objectForPrimaryKey(Book.self, key: $0) } 
realm.create(Library.self, values: ["id": "4321", "books": books], update: true) 

這是不可能直接傳遞作爲主鍵值的一個列表傳遞給create() API的部分值創建Library,並讓Realm自動創建或更新與這些主鍵關聯的Book對象。

相反,此解決方法首先檢索或創建用於使用objectForPrimaryKey()各主鍵值Book對象,然後使用利用create()那些Book對象創建Library

+0

這是我打開的github問題.... – barndog

+1

是的。我只是想在這裏記錄答案,以防其他人對SO有同樣的問題並找到這個答案。 – AustinZ