我有一个名为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
。
假设这段代码范围之外的所有内容都正常工作。有关为什么会发生这种情况的任何提示或线索?我该如何解决这个问题?
编辑:问题已在发布的代码范围之外解决,超出了本问题的范围。我应该进一步正确地审查代码。
答案 0 :(得分:1)
您的代码中没有任何内容可以破坏关系。错误必须在其他地方。
您有一个Plot
对象,因此您可以在没有获取请求的情况下获取带有plot.geometries
的几何图形,并在没有循环的情况下对其进行过滤:
Geometry *geometry = [plot.geometries
filteredArrayUsingPredicate: [NSPredicate predicateWithFormat:@"gid = %@", gidString]]
.firstObject
其中geometries
是plot
的反向关系的名称。
您现在可以设置polygon
属性并保存。如果您没有删除关系,请检查setPolygon
方法。