2015-12-21 158 views
0

我在我的應用程序中使用Realm,並且我遇到了一些問題。 服務器返回應該在我的數據庫中更新的數據。例如:領域:更新部分RLMArray

{ projects:[{ id:1, name:project1, floors:[ { id:1, name:floor1} ] }]} 

它說我應該更新與ID = 1項目namefloors領域。如果來自DB的項目有floor且id = 1,則應該更新它,否則應該添加。但它不應該從地板陣列中刪除其他物體。 我做了什麼:

Project *project = [Project projectFromDictionary:dictionary]; 
[realm beginWriteTransaction]; 
[Project createOrUpdateInDefaultRealmWithValue:project]; 
[realm commitWriteTransaction]; 

但這種代碼在我的項目中刪除其他樓層。我該做什麼?

項目類:

@interface Project:RLMObject 
@property NSString *name; 
@property NSString *projectID; 
@property RLMArray<Floor *><Floor> *floors; 
@end 

樓:

@interface Floor:RLMObject 
@property NSString *name; 
@property NSString *floorID; 
@end 
RLM_ARRAY_TYPE(Floor) 

回答

0

如果使用+[RLMObject createOrUpdateInDefaultRealmWithValue:]或相同的語義的另一種方法,那麼它會查找具有相同的主鍵現有對象,並更新所有它的屬性與新的價值。通過主鍵掃描現有對象的列表屬性,只有那些包含在提供的NSArray中的屬性才與更新的RLMObject相關聯。

在你的情況,你可以從你的dictionary刪除floors屬性爲每個項目的對象,這樣你仍然可以與所述方法合併,但在地板自己手動合併,通過查詢各樓層的識別碼floors財產您的項目實例,是否已經有了這樣的底線,如果不是備用,可以再次創建或更新並將其與項目關聯。