我是Core Data和objective-c的新手。我正在开发一个项目,我从Web服务中获取JSON数据并将其与核心数据同步。 我成功地遵循了这个tutorial,并且能够毫无问题地将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个重复条目。
有没有人知道这是什么造成的?
答案 0 :(得分:0)
我使用的代码的snippit结果证明是正常的。问题是当我在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]];