gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:47:48 25 4
gpt4 key购买 nike

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

在运行时查看了每个变量之后,我确定直到最后一行,一切都可以正常工作。当我将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个对象的3个重复条目。

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

最佳答案

我正在使用的代码段原来工作正常。问题是当我以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]];

关于ios - 核心数据多对多关系在将对象添加到父实体时创建重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18551842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com