我正在使用两个上下文,因此如果用户创建我的 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 与路由的上下文不同,我无法添加它。我也不能只说主要上下文现在是临时上下文。关于我应该如何处理这个问题的任何想法?提前致谢。