从 fetchedresultsController 中删除错误没有索引处的部分
Posted
技术标签:
【中文标题】从 fetchedresultsController 中删除错误没有索引处的部分【英文标题】:Deleting from fetchedresultsController error no section at index 【发布时间】:2013-07-24 20:21:36 【问题描述】:我一直试图弄清楚这一点,但没有得到任何结果。我很想得到一些帮助。 我使用一个有 2 次提取的表。只能编辑表格最后一部分中的 1。当我删除一个项目时,应用程序崩溃说索引处没有部分。我已经阅读了一些对其他类似问题的回复,但仍然无法解决。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return [[fetchedResultsController sections] count]+1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
if (section < fetchedResultsController.sections.count)
return [[fetchedResultsController.sections objectAtIndex:section] numberOfObjects];
else
return fetchedResultsControllerCustomWOD.fetchedObjects.count;
对于 commitEditing 方法:
- (void)tableView:(UITableView *)tableView commitEditingStyle:
(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
NSManagedObjectContext *context = [self managedObjectContext];
if (editingStyle == UITableViewCellEditingStyleDelete)
// Delete object from database
[context deleteObject:[[fetchedResultsControllerCustomFR objectAtIndexPath:indexPath] objectAtIndex:indexPath.row]];
NSError *error = nil;
if (![context save:&error])
NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
return;
// Remove device from table view
[[fetchedResultsControllerCustomFR objectAtIndexPath:indexPath] removeObjectAtIndex:indexPath.row];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
【问题讨论】:
【参考方案1】:如果我理解你所有的 fetch 控制器,你就是:
在此处从 CoreData 中删除对象一次:
// Delete object from database
[context deleteObject:[[fetchedResultsControllerCustomFR objectAtIndexPath:indexPath] objectAtIndex:indexPath.row]];
然后保存上下文:
NSError *error = nil;
if (![context save:&error])
NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
return;
这反过来会提醒fetchedResultsControllerCustomFR
某个项目已被删除。
然后您再次尝试从fetchedResultsControllerCustomFR
中删除:
// Remove device from table view
[[fetchedResultsControllerCustomFR objectAtIndexPath:indexPath] removeObjectAtIndex:indexPath.row];
应该已经知道它已经消失了。鉴于您已经设置了 fetch 控制器代表。
编辑:
将删除调用包装在 -begin 和 -end 调用中:
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
【讨论】:
最后一个应该被注释掉......但即使我这样做了,我也会得到:*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“索引 14 处没有部分” 感谢更新的回复,但它又崩溃了。这是控制台日志: *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableView.m:1070 另外,我启用了 objc_exception_throw,它的输出是:libobjc.A.dylib`objc_exception_throw : 0x2547e52: pushl %ebp 如果有帮助的话。以上是关于从 fetchedresultsController 中删除错误没有索引处的部分的主要内容,如果未能解决你的问题,请参考以下文章