我有一个管理分组tableView的UITableViewController。 tableView是从fetchedResultsController填充的。
如果我点击导航栏中的修改按钮,然后选择一行并点击删除按钮,该行将被删除,所有行都将结束。
但是,如果我滑动以显示行中的“删除”按钮并单击“删除”按钮,则应用程序崩溃并显示以下错误:
2010-01-06 15:25:18.720 Take10 [14415:20b]严重的应用程序错误。在Core Data更改处理期间捕获到异常: - [NSCFArray objectAtIndex:]:index(1)超出bounds(1)with userInfo(null)
2010-01-06 15:25:18.721 Take10 [14415:20b]由于未捕获的异常'NSRangeException'终止应用程序,原因:'*** - [NSCFArray objectAtIndex:]:索引(1)超出边界(1) )'
当然,错误中的索引号会根据我尝试删除行的部分中的行数而变化,并且该数字比尝试后的表部分中的剩余行数多1个删除。
以下是我尝试从fetchedResultsController中删除数据的代码。同样的方法响应两种情况,所以我不明白为什么它在滑动时崩溃。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the managed object for the given index path
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
[context deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]];
// Save the context.
NSError *error = nil;
if (![context save:&error]) {
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
*/
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
任何想法???
由于
JK
答案 0 :(得分:2)
正常删除和轻扫删除之间的一个区别是后者会调用tableView:willBeginEditingRowAtIndexPath
和tableView:didEndEditingRowAtIndexPath
。实际上,这是一种抑制缩进和显示插入行的好方法。
另一个区别是在删除后立即调用setEditing:
(NO
作为参数值)。
在您已定义/覆盖的这三个函数中的任何一个中设置断点,并查看是否可以缩小它发生的位置。
答案 1 :(得分:2)
Jeff LaMarche在NSFetchedResultsController上做了一些不错的工作。
尝试在此处使用他的模板: http://iphonedevelopment.blogspot.com/2010/01/navigation-based-core-data-application.html
看看是否可以解决您的问题。