2

我是 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];

在运行时查看每个变量后,我确定一切正常,直到最后一行。当我将 Entity2 添加到 Entity1 时,它实际上添加了对象。但是,当我尝试添加 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 个重复条目。

有谁知道是什么原因造成的?

4

1 回答 1

0

我使用的代码片段结果证明工作正常。问题是当我在其中显示数据时,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]];
于 2013-08-31T20:27:12.063 回答