我在子上下文中插入了一个对象并获得了objectID,然后我保存了子上下文和父上下文。现在我想通过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
}];
答案 0 :(得分:0)
在NSManagedObjectID
执行后,尚未提交的新创建的NSManagedObject
的{{1}}会发生变化。
这就是您在保存对象后无法使用save
找到NSManagedObject
的原因。
答案 1 :(得分:0)
新对象在保存到永久存储区时将获得新的NSManagedObjectID。在保存之前,您可以致电obtainPermanentIDsForObjects
获取永久ID。
[childContext obtainPermanentIDsForObjects:@[obj] error:&error];
NSManagedObjectID *objID = [obj ObjectID];