【问题标题】:Error while using ARC + Core Data使用 ARC + 核心数据时出错
【发布时间】:2011-11-07 20:23:24
【问题描述】:

以下是重现的步骤:

使用 Xcode 4.2 创建一个使用 Master-Detail Application

的新项目

选中使用自动引用计数 (ARC)、Core Data 并选择 iPad . 在viewDidLoad 里面放这个代码:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(goBack)]; 
backButton.title = @"back";
self.navigationItem.leftBarButtonItem = backButton;

也将此方法放在其他地方:

- (void)goBack
{
    [self.navigationController popViewControllerAnimated:YES];
}

在MasterViewController 上的didSelectRowAtIndexPath 中输入以下代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MasterViewController* master = [[MasterViewController alloc] init];
    master.managedObjectContext = self.managedObjectContext;
    [self.navigationController pushViewController:master animated:YES];  
}

添加一行并在其中单击。

返回主视图并在项目中再次单击。

尝试在新视图中添加或删除内容会发生以下崩溃:

*** -[MasterViewController controllerWillChangeContent:]: message sent to deallocated instance 0x6d85c30

如果您不使用 ARC,则不会发生相同的步骤。

使用模态时同样的错误。

谁能确认这一点,或者我在使用 ARC 时遗漏了什么?

【问题讨论】:

  • 当它崩溃时你会得到什么堆栈跟踪?
  • *** -[MasterViewController controllerWillChangeContent:]:消息发送到已释放实例 0x6d85c30
  • 这种情况(虽然很奇怪)在 ARC 下运行良好。您是否进行了此处未反映的其他更改?通常,ARC 会导致任何未保留在某处的对象在运行循环结束时被释放。您的错误表明您进行了更改,将错误的 MasterViewController 分配为 fetchedResultsController 的委托,因此正在向解除分配的 Master 发送委托消息。如果您需要更多帮助,请发布更多代码。
  • 不同之处在于方案编辑器中的“启用僵尸对象”选项被启用,导致该错误。很奇怪!
  • 谢谢,似乎禁用僵尸对象解决了我同样的问题;)

标签: objective-c ios ipad core-data automatic-ref-counting


【解决方案1】:

似乎使用核心数据启用僵尸会导致一些问题,我能给出的最佳建议是仅在必要时启用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多