父/子 NSManagedObjectContext 不起作用
Posted
技术标签:
【中文标题】父/子 NSManagedObjectContext 不起作用【英文标题】:Parent/Child NSManagedObjectContext not working 【发布时间】:2012-10-15 10:37:31 【问题描述】:我在使用父子 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();
];
谢谢!
【问题讨论】:
【参考方案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 = ...;
然后新事件在表格视图中正确显示。
【讨论】:
该死,这确实有帮助。但作为一项规则,我通常不会在检查里面的所有信息是否正确之前添加 NSManagedObject。让我们看看情况如何。顺便说一句,谢谢! 我认为这是 NSManagedObjectContext 中的错误,我需要填写错误报告。谢谢!以上是关于父/子 NSManagedObjectContext 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
父组件接收子组件事件的参数===子组件给父组件传值===子组件调用(绑定)父组件的方法