由于核心数据故障,应用程序在启动时崩溃

Posted

技术标签:

【中文标题】由于核心数据故障,应用程序在启动时崩溃【英文标题】:Application crashes on launch due to Core Data fault 【发布时间】:2013-05-06 08:29:31 【问题描述】:

测试人员遇到了一种情况,即(ios)应用程序在启动时由于无法实现的核心数据故障(抛出NSObjectInaccessibleException)而崩溃。因为应用程序做的第一件事是用托管对象填充表格视图,所以应用程序在启动时会继续崩溃。

问题很简单。 我该如何解决这个问题,以便测试人员至少可以继续使用应用程序而不会丢失数据?

为了为这个问题提供更多背景信息,当如下所示配置表格视图单元格时,应用程序会崩溃。这个方法是从tableView:cellForRowAtIndexPath:调用的。

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
    // Fetch Store
    CCDStore *store = [self.fetchedResultsController objectAtIndexPath:indexPath];

    // Configure Cell
    [cell.textLabel setText:[store name]]; // Exception is thrown due to Core Data fault
    [cell.detailTextLabel setText:[store numberOfLists]];

因为我无权访问设备或(SQLite)数据库,我猜测是部分数据库包含损坏的数据导致故障。

【问题讨论】:

【参考方案1】:

当我在我的应用程序中看到错误时,通常是因为释放了NSManagedObjectContext。当从上下文中“获取”NSManagedObject,然后释放上下文时,对象会触发错误以释放内存。所以也许检查上下文是否存在可以告诉你这是否是问题所在。如果是,请确保以正确的方式保留它(如果使用 ARC,请在类的接口文件中声明上下文。

【讨论】:

我已经执行了这些检查,但在这种情况下这似乎不是问题。【参考方案2】:

我知道这并不理想,但是在有问题的行周围添加 @try / @catch 并在 catch 中处理错误将防止您的应用崩溃。

【讨论】:

以上是关于由于核心数据故障,应用程序在启动时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

首次应用启动时导入核心数据

由于核心数据迁移,应用程序在从应用商店更新后崩溃

TableView 由于核心数据错误而崩溃/冻结

崩溃后核心数据为空

核心数据 - 多线程 - 启动时的竞争条件

核心数据警告:“版本哈希信息不适用于所有型号”