0
我試圖在嵌套對象中做一些簡單的更新,我注意到它沒有一致地發生。無法一致更新Realm中的嵌套對象
讓我們假設假設以下類別涉及:
@interface Dog : RLMObject
@property NSString *name;
@property NSData *picture;
@property NSInteger age;
@end
@interface Person : RLMObject
@property NSString *name;
@property RLMArray<Dog *><Dog> *dogs;
@end
如果服務器通過我一個Person對象有一個更新的狗的名字,現在我只想做(在僞代碼)
for (Dog *dog in person.dogs)
{
dog.name = updatedDogName;
}
[defaultRealm beginWriteTransaction];
[defaultRealm addOrUpdateObject:person];
[defaultRealm commitWriteTransaction];
假設:
1)Person和相應的Dog對象具有唯一的主鍵
2)Person和相應的Dog對象已經存在於DB中,並且我只是通過Person對象更新Dog對象。
我在這裏做錯了什麼?我注意到更新大概只有一半時間發生。
賈斯珀你好。有什麼方法可以創建示範項目來演示此行爲並將其發送至[email protected]?能夠重現問題將幫助我們弄清楚發生了什麼。 – AustinZ
就像觀察一樣,如果你在這個事務中只改變了狗的名字,就沒有必要調用'[defaultRealm addOrUpdateObject:person];'。在這種情況下,由於你的'Person'沒有主鍵,這將保證每次調用它時都會向數據庫添加一個新的'Person'副本。 – TiM
@AustinZ,我認爲這個問題源於使用writeCopyToURL在寫事務進行時壓縮數據庫的大小。我目前正在努力追蹤我需要在autoreleasepools中添加哪些內容以減少這種情況的發生。如果有任何寫入事務正在進行,或者在內存中是否有任何連接到默認領域的實例的領域對象,是否有智能的方法? –