2015-12-21 87 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财产您的项目实例,是否已经有了这样的底线,如果不是备用,可以再次创建或更新并将其与项目关联。