0

我有一个简单的 iphone 应用程序,其中包含一对多礼物与收件人的关系(也就是说,一个收件人可以收到很多礼物,但每个礼物必须送给一个收件人。为了创建礼物和收件人之间的关系,我正在创建首先在托管对象上下文中创建一个新的收件人对象,将新控制器的收件人对象设置为新收件人,然后将新控制器弹出到导航控制器上。当新控制器返回时,我将新收件人分配给礼物。

该交易的代码:

RecipientEditController *nextController = [
                                            [RecipientEditController alloc]
                                            initWithStyle:UITableViewStyleGrouped
                                          ];

Recipient *new = [NSEntityDescription 
                  insertNewObjectForEntityForName:@"Recipient" 
                  inManagedObjectContext:gift.managedObjectContext
                 ];
[new addGiftsObject:gift];

nextController.recipient = new;
nextController.recipient.hideRelationships = YES;

[self.navigationController pushViewController:nextController animated:YES];

if ([new hasData]) {
    gift.recipient = new;
} else {
    [gift.managedObjectContext deleteObject:new];
}

break;

在新的控制器中,接收对象似乎正常运行;我可以在 ViewWillAppear 方法中打印收件人的描述。但是当我到达 tableView:cellForRowAtIndexPath 方法时,我的接收对象不再有效:它的 managedObjectContextProperty 为 nil,并且调用接收者.firstName(在模型类和数据库中定义的属性),会引发错误。

错误:

2011-11-30 17:22:18.111 Gift Hero[36359:b603] *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x59e65c0 <x-coredata://97FDB78C-6F65-4B54-8DBB-00A9C6A4B4C8/Recipient/p21>''

知道发生了什么吗?这简直让我发疯!收件人怎么能在显示视图和显示表格之间无效?!

提前致谢,PT

4

1 回答 1

0

好的,所以我想我已经弄清楚了。推送一个新的 viewController 似乎不会结束当前方法的执行,就像调用另一个函数一样。因此,当我在推送视图控制器后删除对象时,它正在删除另一个视图控制器中的对象。我真的不明白这背后的逻辑,但它就是这样......

于 2011-12-01T17:17:05.610 回答