核心数据到多个关系在向父实体添加对象时创建重复项

时间:2013-08-31 19:10:57

标签: ios core-data one-to-many relationships

我是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个重复条目。

有没有人知道这是什么造成的?

1 个答案:

答案 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]];