【问题标题】:Core data crashing on delete of parent tablerow删除父表行时核心数据崩溃
【发布时间】:2013-05-12 17:36:28
【问题描述】:

我将 ECSlidingViewController 用于 Path & FB 样式的 UI。两个 UITableView,一个(细节)显示为主视图,第二个(主视图)显示为侧菜单。两者均由 Core Data 提供支持。

在侧边菜单 UITableView 中删除父表行时,我遇到了严重的崩溃,但仅当删除时详细页面显示父行的子行时。所有其他行都按预期删除。

删除行由以下人员处理:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [self.managedObjectContext deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
    }
}

我在日志中收到以下错误:

CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常。这通常是 NSManagedObjectContextObjectsDidChangeNotification 观察者中的一个错误。无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (0) 必须等于更新前该节中包含的行数 (3),加上或减去数字从该部分插入或删除的行数(0 插入,1 删除)加上或减去移入或移出该部分的行数(0 移入,0 移出)。与 userInfo (null)

delete rule 设置为 Nullify 是否有帮助?

我猜 Core Data 会一次性从 NSFetchedResultsController 中删除所有子项,然后 UITableVIew 会变得混乱吗?

如何在不崩溃的情况下删除父子 NSManagedObjects?

【问题讨论】:

  • 删除对象后,执行新的抓取并重新加载数据。您也可以为此使用 NSFetchResultsControllerDelegate。希望对您有所帮助。
  • 我无法在没有崩溃的情况下删除对象。单个项目删除工作正常。我不明白为什么它试图一次删除所有子项。

标签: uitableview core-data nsmanagedobject nsfetchedresultscontroller


【解决方案1】:

多次查看代码后发现我嵌套了[self.tableView beginUpdates][self.tableView endUpdates],它们不同步了,我连续两次调用endUpdates。

我在开发这个应用程序时已经打过很多次了。如果您遇到此类崩溃,并且您可能正在使用 CS193P 课程中的 CoreDataTableViewController,请检查您对 beging 的使用并结束更新!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多