【发布时间】:2012-01-18 15:45:58
【问题描述】:
我有一个 tableView,它使用 NSFetchedResultsController 来填充 viewDidLoad 上的表格单元格。用户可以选择使用 UISegmentControl(索引 0 = 'number',索引 1 = 'name')对 tableView 进行排序。
当用户单击 UISegmentControl 时,它会调用函数 sortShortListUsingSelectedSortIndex,然后此函数将使用 setSortDescriptors 和 NSFetchedResultsController 重新排序 tableView。当表格被重新排序并且用户选择一行时,didSelectRowAtIndexPath: 正在显示我希望看到的NSIndexPath(例如,IndexPath [0,6] 被重新排序为 Index [0,3]),但是在尝试时要删除同一行,didChangeObject:atIndexPath:forChangeType:newIndexPath 中的 NSIndexPath 会显示旧的 IndexPath [0,6] 而不是 [0,3] 并会导致崩溃:
CoreData:错误:严重的应用程序错误。在调用 -controllerDidChangeContent: 期间,从 NSFetchedResultsController 的委托中捕获了异常。无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (9) 必须等于更新前该节中包含的行数 (9),加上或减去数字从该部分插入或删除的行数(0 插入,1 删除)加上或减去移入或移出该部分的行数(0 移入,0 移出)。与 userInfo (null)
这是我的方法的简化版本:Gist
为什么我在 tableView 中看到同一行的不同索引?
【问题讨论】:
标签: objective-c uitableview ios5 nsfetchedresultscontroller