保存后我的 NSManagedObjectID 仍然是临时的。但为什么?

My NSManagedObjectID is still temporary after saving. But why?

我保存了我的 managedObjects。但是我的NSManagedObjectID保存后还是临时的。为什么?

dispatch_async(privateQueue, ^{
    __block NSMutableArray *ids = [NSMutableArray array];

    [[[LPAppDelegate instance] privateContext] performBlockAndWait:^{

        if ([responseObject isKindOfClass:[NSDictionary class]]) {
            id arr = ((NSDictionary*)responseObject)[@"results"];
            for (int i=0; i < ((NSArray *)arr).count; i++) {
                LPFilm *film = [LPFilm MR_createEntityInContext:privateContext];
                [ids addObject:film.objectID];
            }
        }

        NSError *error = nil;
        [privateContext save:&error];
        if (error) {
            NSLog(@"___fetch service error: %@", [error localizedDescription]);
        }
    }];


    for (NSManagedObjectID *objID in ids) {
        if (objID.isTemporaryID) {
            NSLog(@"__tempID %@", objID);
        }
    }
});

保存更改后,新的 NSManagedObject 实例会获得一个新的对象 ID。以前存在的 NSManagedObjectID 实例不会就地转换,它们会被新实例替换。但是你必须向管理对象询问它的​​新ID。

在您的例子中,您在保存之前保存了一组对象 ID。即使您保存更改,这些对象也永远不会更改。但是,如果您返回托管对象并再次询问它们的对象 ID,您将得到不同的结果,这不会是暂时的。