我正在使用两个上下文,这样如果用户创建我的NSManagedObjectModel子类,AddressAnnotation(在地图上指向),当用户创建一个新路由(我的另一个实体与AddressAnnotation有多对多的关系)时,如果他们决定取消,我可以轻易地丢弃对象,因为它们是在tempContext中创建的。所以代码看起来像这样:
AddressAnnotation *anAddress = [AddressAnnotation insertAddressAnnotationWithCoordinate:coordinate inManagedObjectContext:self.tempContext];
[self.route addAddressAnnotationsObject:anAddress];
然后当我保存地址和路线时,我这样做:
NSManagedObjectContext *tempContext = [self.route managedObjectContext];
[tempContext performBlock:^{
NSError *error = nil;
if (![tempContext save:&error]) {
NSLog(@"an error occurred: %@", [error localizedDescription]);
}
[self.managedObjectContext performBlock:^{
NSError *error = nil;
if (![_managedObjectContext save:&error]) {
NSLog(@"error in main context: %@", [error localizedDescription]);
}
}];
}];
这部分工作正常。我现在遇到的问题是,在我显示这些保存路由的另一个视图控制器中,路由来自self.managedObjectContext,我的主要上下文。因此,在我显示保存的路线后,如果他们选择了它,那么它会返回到地图,以便他们可以添加更多。我在故事板上这样做:
if ([destination respondsToSelector:@selector(setManagedObjectContext:)]) {
[destination setValue:_managedObjectContext forKey:@"managedObjectContext"];
}
但是现在,当我尝试调用[self.route addAddressAnnotationsObject:anAddress];
因为self.tempContext与路由的上下文不同时,我无法添加它。我也不能只说主要背景现在是临时文本。关于我应该怎么做的任何想法?提前谢谢。
答案 0 :(得分:0)
self.route
位于self.managedObjectContext
,但anAddress
位于self.tempContext
。要解决此问题,您必须获取objectID
self.route
,然后使用它在self.tempContext
中找到该对象:
- (NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error