更新我有兩個RLMObjects
:如何正確處理創建和realm.io關係
class Timeline: RLMObject {
dynamic var entries = RLMArray(objectClassName: Entry.className())
dynamic var id = 0
dynamic var title = ""
dynamic var coverPhoto = ""
dynamic var body = ""
override class func primaryKey() -> String {
return "id"
}
}
class Entry: RLMObject {
dynamic var id :Int = 0
dynamic var timelineID :Int = 0
dynamic var name :String = ""
dynamic var caption :String = ""
dynamic var body :String = ""
dynamic var imageURL :String = ""
override class func primaryKey() -> String {
return "id"
}
}
正如你可以看到有一個時間軸和條目之間的一對多的關係。時間軸上有很多條目。
的JSON獲取和我的時間安排分配工作得很好,他們被取出,並設置:
realm.beginWriteTransaction()
Timeline.createOrUpdateInDefaultRealmWithObject(timelineObject)
realm.commitWriteTransaction()
我的問題出現了,當我試圖獲取項目(這是一個單獨的JSON請求/響應)給定的時間線並設置它們。
獲取和創造他們喜歡這個工作得很好:
realm.beginWriteTransaction()
Entry.createOrUpdateInDefaultRealmWithObject(entryObject)
realm.commitWriteTransaction()
當然,這並不將它們與我的Timeline對象關聯的,但。於是我試圖讓我的Timeline對象,然後通過做添加條目對象到我的時間表:
let timelineObject = Timeline(forPrimaryKey: id)
timelineObject.entries.addObject(entryObject)
(內部交易無氧銅)。
這適用於初始抓取。但是,當我試圖重新獲取你的數據,你會得到以下RLMException:
'RLMException', reason: 'Can't set primary key property 'id' to existing value 59.'
我做得不對,或者這是一個錯誤?似乎應該有一個RLMObject實例方法來創建或更新產品,就像它的類方法一樣?
解決方案 作爲segiddins意見建議,您可以添加從類方法的返回:createOrUpdate ......然後添加回你的對象(在我的情況下,timelineObject.entries.addObject(entryReturn)
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction()
for entry in json["entries"] {
...
//Process and map the JSON
...
let entryReturn = Entry.createOrUpdateInDefaultRealmWithObject(entryObject)
timelineObject.entries.addObject(entryReturn)
}
realm.commitWriteTransaction()
嘗試添加從createOrUpdate調用返回的Entry對象嗎? – segiddins 2015-02-11 20:33:02
它就像那個segiddins一樣簡單!謝謝。你不想m回答一個答案,所以它可以得到upvoted? Ps。多麼棒的框架! :) – Chris 2015-02-11 20:46:51