對於這個問題的緣故內的對象,這裏有一個簡單的例子(有幾個快捷鍵):境界斯威夫特:更新封閉
class Foo: Object {
dynamic var id: Int = 0
[...]
}
class Bar: Object {
dynamic var id: Int = 0
dynamic var foo: Foo?
convenience required init(data: AnyObject) {
self.init()
self.id = data.id as! Int
if let foo_id = data.foo_id as? Int {
// Function querying the remote database and returning an object
Foo.get(foo_id) { (foo) -> Void in
self.foo = foo // Foo object assigned, as expected
}
}
}
}
如果我在get()
關閉做self.foo = foo
函數,我得到一個例外:
異常'RLMException',原因:'嘗試修改寫事務之外的對象 - 首先在RLMRealm實例上調用beginWriteTransaction。
所以,如果我加入它周圍的realm.write,如要求由前一個異常:
...
Foo.get(foo_id) { (foo) -> Void in
let realm = Realm(path: Realm.defaultPath)
realm.write {
self.foo = foo
}
}
...
這一次,我得到一個新問題:
異常「RLMException ',原因:'不能添加對象從一個不同的領域'
我卡住了,我不明白什麼是領域是想g來自我這裏,文檔沒有幫助。
我並不習慣於領域,所以我想我的工作方式有問題,但我不知道是什麼。
感謝您的幫助
您是否正在對已經保存在* ANY *其他領域的對象執行此操作? 「Realm.defaultPath」以外的東西?第一個異常很明顯 - 要麼執行'beginWriteTransaction()' - > write - >'commitWriteTransaction()'或者你提到的那個塊。另一個異常發生在您嘗試更新**錯誤**領域中的對象時,而不是您已將其保存到的對象。 – Michal
我只有一個領域,我使用默認的。我想這可能與對象初始化後在閉包中使用'self'有關? – Sylver
我也嘗試過'self.realm.write(){...}',但'self.realm'是可選的,在嘗試寫入我的對象時爲零,所以我看不到使用這個的一點 – Sylver