编辑嵌套对象后,核心数据关系丢失

时间:2016-05-05 11:55:32

标签: ios objective-c core-data

我有一个名为Geometry的实体,它与Plot实体相关。在我们的代码段中,鉴于Plot以及NSDictionary中存储的一些已下载数据,我们必须获取Geometry并设置一些NSString属性,但在执行此操作后,我发现实体之间的关系丢失了。

NSError * saveError = nil;

NSFetchRequest * request = [[NSFetchRequest alloc] initWithEntityName:[Geometry entityName]];
request.predicate = [NSPredicate predicateWithFormat:@"plot == %@", plot];
NSError * error = nil;
NSArray * results = [context executeFetchRequest:request error:&error];

Geometry * __block geometry = nil;

if ([results count] > 0) {
    [results enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL * stop) {
        Geometry * geometryObject = obj;
        if ([geometryObject.gid isEqualToString:[NSString stringWithFormat:@"%@", [data valueForKey:@"gid"]]]) {
            geometry = geometryObject;
            stop = YES;
        }
    }];
}

if (geometry != nil) {
    [geometry setPolygon:[NSString stringWithFormat:@"%@", [data valueForKey:@"polygon"]]];
}

if (![context save:&saveError]) {
    NSLog(@"%@", saveError);
}

我第一次运行此代码results有一个对象,但下次运行时没有results

假设这段代码范围之外的所有内容都正常工作。有关为什么会发生这种情况的任何提示或线索?我该如何解决这个问题?

编辑:问题已在发布的代码范围之外解决,超出了本问题的范围。我应该进一步正确地审查代码。

1 个答案:

答案 0 :(得分:1)

您的代码中没有任何内容可以破坏关系。错误必须在其他地方。

您有一个Plot对象,因此您可以在没有获取请求的情况下获取带有plot.geometries的几何图形,并在没有循环的情况下对其进行过滤:

Geometry *geometry = [plot.geometries
   filteredArrayUsingPredicate: [NSPredicate predicateWithFormat:@"gid = %@", gidString]]
   .firstObject

其中geometriesplot的反向关系的名称。

您现在可以设置polygon属性并保存。如果您没有删除关系,请检查setPolygon方法。