【发布时间】:2014-02-08 19:32:12
【问题描述】:
我有一个 CodeData 模型 [电话]>[转发]。所以 Phone 对象有一个 Forwardings 集,反之亦然。
我有一个电话列表,想将其中一个添加到新的转发中。
在ForwardingViewController我做:
// Create a new managed object context; set its parent to the fetched results controller's context.
managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[managedObjectContext setParentContext:[fetchedResultsController managedObjectContext]];
self.forwarding = (ForwardingData*)[NSEntityDescription insertNewObjectForEntityForName:@"Forwarding"
所以这会创建一个子 MOC 和一个现在临时的转发。
然后我将self->forwarding 传递给我的PhonesViewController,它会显示所有电话(在表格中)。这个视图控制器只是导航推送的。
当用户点击表格中的一个电话时,我会这样做:
[self.forwarding addPhonesObject:phone];
addPhonesObject 是 CoreData 生成的访问器。
现在,当用户返回ForwardingViewController 并点击取消按钮(因为他决定他根本不想创建新的转发)时,它被解除,这会清理这个孩子managedObjectContext 和还有self.forwarding。
执行上述操作后,我收到一个数据库错误(Cocoa 错误 1550)。当试图理解控制台输出时,我的猜测是转发确实被删除了,但是电话对象(当然仍然存在)现在对这个删除的转发有一个空引用。
我的问题。我应该如何正确处理这种情况:在子 MOC 上创建一个临时对象,将其链接到另一个对象(在父 MOC 上),然后再次删除这个临时对象。
【问题讨论】: