0

使用核心数据,我在各种方法之间传递 objectID 以执行各种操作。我似乎有一个错误,因为对象 ID 是临时的,即使强制它成为永久的也是如此。

NSManagedObjectContext *context=[(id)[[UIApplication sharedApplication] delegate] theContext];
__block MyObject *myObject;
[context performBlockAndWait:^(void){
    myObject= [NSEntityDescription insertNewObjectForEntityForName:@"MyObject" inManagedObjectContext:context];
    myObject.name=@"thename";
    [(id)[[UIApplication sharedApplication] delegate] saveTheContext];
}];
NSLog(@"is temporary before calling obtainpermanentid=%d",[myObject.objectID isTemporaryID]);
BOOL b=[context obtainPermanentIDsForObjects:[NSArray arrayWithObject:myObject] error:nil];
NSLog(@"is temporary after calling obtainpermanentid=%d",[myObject.objectID isTemporaryID]);

在这种情况下,我希望在保存后获得一个永久的 objectID。这没有发生,我试图通过调用 gainPermanentIDsForObjects(返回 true)来强制执行此操作,但之后该对象仍然有一个临时 ID。

关于什么条件可能导致对象 ID 保持临时性的任何想法?

4

1 回答 1

0

我的错,这段代码是在使用 NSIncrementalStore(通过 AFIncrementalStore)的现有实现之上添加的。

作为子类化 NSIncrementalStore 的一部分,该方法obtainPermanentIDsForObjects被覆盖,在这种情况下,该方法在某些条件下返回临时对象 ID。

于 2013-08-03T04:28:18.670 回答