【问题标题】:Serious Application Error严重的应用程序错误
【发布时间】:2010-03-22 14:55:16
【问题描述】:

我有一个 TableView 控制器类,它使用获取的结果控制器来显示从核心数据模型中获取的“患者”实体列表。该表的部分取自称为“位置”的患者属性。这是获取请求的排序描述符:

NSSortDescriptor *locationDescriptor = [[NSSortDescriptor alloc] initWithKey:@"location" ascending:YES];
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:locationDescriptor, lastNameDescriptor, nil];

这是 FRC 的初始化代码:

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"location" cacheName:@"List"];

当我想添加一个新的“患者”实体时 - 我单击一个添加按钮,然后将一个“添加新患者”视图控制器推送到导航堆栈。

我添加的第一个病人效果很好。

如果我添加第二个患者 - 应用程序有时会崩溃并出现以下错误:

2010-03-22 14:42:05.270 患者[1126:207] 严重的应用程序错误。在核心数据更改处理期间捕获到异常:* -[NSCFArray insertObject:atIndex:]: index (1) beyond bounds (1) with userInfo (null) 2010-03-22 14:42:05.272 患者 [1126:207] * 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“***-[NSCFArray insertObject:atIndex:]: index (1)越界(1)'

这似乎只有在患者添加了位置时才会发生(如果没有添加,则位置默认为“未知”)。它似乎也与位置的排序有关。例如,如果第一个患者位置 = 14 号病房,第二个患者位置 = 9 号病房,那么它一定会崩溃。

我想知道这是否与我如何要求获取的结果控制器对部分名称进行排序有关??

这个错误让我发疯了,我就是想不通。任何帮助将不胜感激!

【问题讨论】:

    标签: iphone objective-c xcode uitableview nsfetchedresultscontroller


    【解决方案1】:

    这似乎是 Apple 代码中的一个错误。我使用this SafeFetchedResultsController 子类取得了一些成功。

    【讨论】:

    • iOS 8 还需要这个吗?
    【解决方案2】:

    当你在使用 NSFetchedResultsController 时看到“异常在核心数据更改处理期间被捕获”的消息时,你应该立即开始查看你的 NSFetchedResultsControllerDelegate 方法。我建议在控制器的开头设置断点:didChangeObject:atIndexPath:forChangeType:newIndexPath 方法。然后逐步执行此方法并观察崩溃发生的位置。问题可能是您没有在此方法中正确管理节的插入和删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      相关资源
      最近更新 更多