我在子上下文中插入了一個對象並獲得了對象ID,然後我保存了子上下文和父上下文。現在我想通過objectID獲取對象,但是我只能通過子上下文獲取父對象,爲什麼?保存後在父上下文中不存在在子上下文中創建的新對象
...
NSManagedObjectContext *childContext = [[[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType] autorelease];
childContext.parentContext = self.parentContext;
[childContext performBlock:^{
NSManagedObject *obj = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:childContext];
if (![childContext save:&error]) {
NSLog(@"%@", error);
}
[self.parentContext performBlockAndWait:^{
if (![self.parentContext save:&error]) {
NSLog(@"%@", error);
}
}];
NSManagedObjectID *objID = [obj ObjectID];
NSManagedObject *objTmp = [self.parentContext existingObjectWithID:objID error:&error];
// Why objTmp is nil here?
NSManagedObjectID *objIDTmp = [[[self.parentContext executeFetchRequest...] objectatindex:0] objectID];
// objIDTmp is different from objID
}];
感謝您的回覆,但我在通過objectID獲取對象之前保存了childContext和parentContext,您可以檢查我的代碼。 – 2015-04-03 11:05:59
是的,這就是爲什麼'objID'的值會因爲執行了'if(![childContext save:&error])而改變的原因{NSKLog(@「%@」,error); }'。移動'NSManagedObjectID * objID = [obj ObjectID];'在你獲取並嘗試的行的上方。 – Apoorv 2015-04-03 11:09:32
我已經更新了我的問題,那是什麼意思?如果是這樣,它仍然不起作用....事實上,我可以用childContext但parentContext獲取對象。 – 2015-04-03 11:22:52