我在使用Parent Child NSManagedObjectContext时遇到了一些麻烦。 问题是我想在EventsPlanner类中使用子NSManagedObjectContext来创建随机事件。如果您注意到它直接保存到主NSManagedObjectContext,但我想使用子进程并更新到父进程。
如果您看到按“+”按钮会添加一个新事件,但它看起来是空的。
我添加了示例项目 - > https://dl.dropbox.com/u/63377498/ParentChildExperiment.zip
创建子NSManagedObjectContext:
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_managedObjectContext setUndoManager:nil];
[_managedObjectContext setParentContext:appDelegate.managedObjectContext];
return _managedObjectContext;
}
存储
Event *event = [[Event alloc] initWithEntity:self.eventEntity insertIntoManagedObjectContext:nil];
event.title = ...;
event.location = ...;
event.timeStamp = ...;
[self.managedObjectContext insertObject:event];
[self.managedObjectContext performBlock:^{
NSError *childError = nil;
if ([self.managedObjectContext save:&childError]) {
[self.managedObjectContext.parentContext performBlock:^{
NSError *parentError = nil;
if (![self.managedObjectContext.parentContext save:&parentError]) {
NSLog(@"parent error: %@", [parentError description]);
abort();
}
}];
} else {
NSLog(@"child error: %@", [childError description]);
abort();
}}];
谢谢!
答案 0 :(得分:1)
我无法告诉您为什么这不起作用的确切原因,但问题似乎是您创建了没有托管对象上下文的 Event 实体,并稍后将其添加到MOC:
// Create random object
Event *event = [[Event alloc] initWithEntity:self.eventEntity insertIntoManagedObjectContext:nil];
event.title = ...;
event.location = ...;
event.timeStamp = ...;
// Insert object
[self.managedObjectContext insertObject:event];
如果将其更改为
Event *event = [[Event alloc] initWithEntity:self.eventEntity
insertIntoManagedObjectContext:self.managedObjectContext];
event.title = ...;
event.location = ...;
event.timeStamp = ...;
然后在表格视图中正确显示新事件。