0

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

4

1 回答 1

0

self.route在 中self.managedObjectContext,但anAddress在 中self.tempContext。要解决这个问题,您必须先使用它objectIDself.route然后使用它来查找该对象self.tempContext

- (NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error
于 2013-10-06T11:33:33.430 回答