核心数据到多个关系在向父实体添加对象时创建重复项
我是Core Data和objective-c的新手。 我正在开发一个项目,我从Web服务中获取JSON数据并将其与核心数据同步。 我成功地遵循了本教程,并且能够毫无问题地将JSON转换为核心数据。 我遇到问题的地方是更新与多对多关系相关的NSSet。 到目前为止,我可以让它更新,但这样做会在集合中创建重复的条目。 例如,我尝试在我的自定义ManagedObject Entity1中使用Xcode生成的访问方法:
Entity1>Entity2>Entity3
我使用此代码将Entity2对象添加到Entity1
NSNumber *parentIdNumber = [record valueForKey:@"parent_id"]; NSArray *parentIdArray = [NSArray arrayWithObject:parentIdNumber]; NSArray *parentEntityArray = [self managedObjectsForClass:@"Entity1" sortedByKey:@"id" usingArrayOfIds:parentIdArray inArrayOfIds:YES]; Entity1 *parentEntity = [parentEntityArray lastObject]; [parentEntity addEntity2Object:(Entity2 *)newManagedObject];
在运行时查看每个变量后,我确定一切正常,直到最后一行。 当我向Entity1添加Entity2时,它确实添加了对象。 但是,当我尝试添加3个不同的Entity2对象时,它似乎在Entity1中创建了3个重复的Entity2对象。 3个重复项是添加的Entity2的最后一个实例。
我也试过使用这个答案的方法: https : //stackoverflow.com/a/5370758/2670912 。 看起来像这样:
NSNumber *parentIdNumber = [record valueForKey:@"parent_id"]; NSArray *parentIdArray = [NSArray arrayWithObject:parentIdNumber]; NSArray *parentEntityArray = [self managedObjectsForClass:@"Entity1" sortedByKey:@"id" usingArrayOfIds:parentIdArray inArrayOfIds:YES]; Entity1 *parentEntity = [parentEntityArray lastObject]; NSMutableSet *entity2Set = [parentEntity mutableSetValueForKey:@"entity2"]; [entity2Set addObject:newManagedObject];
这具有相同的重复条目结果,除了不添加第三个对象的3个重复条目,我得到第一个对象的3个重复条目。
有没有人知道这是什么造成的?
我使用的代码的snippit结果certificate是正常的。 问题是当我在UITableView
显示数据时,它正确地重写NSSet
的实体数量,从而显示正确的单元格数。 但是,我有一个代码:
NSSet *entitiesSet = [self.selectedEntity1 valueForKey:@"entity2"]; NSArray *entities = [entitiesSet allObjects]; Entity2 *entity = [entities objectAtIndex:[indexPath indexAtPosition:0]];
这会导致单元格仅显示NSSet
的最后一个对象,使其看起来像重复项。 我通过将0
更改为1
来解决问题,如下所示:
Entity2 *entity = [entities objectAtIndex:[indexPath indexAtPosition:1]];