我想要完成的是显示基于查询的部分(因此部分的数量不固定),但每个部分始终只显示1行。
我可以通过实施numberOfRowsInSection
来实现这一目标:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
所以看起来很好。但是,当我从Core Data支持的存储中删除一行时(例如在另一个Controller中),我总是会收到这样的错误:
“断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-2935.137 /UITableView.m:1114 2014-04-03 18:31:22.453 TestApplication [70450:60b] CoreData:错误:严重的应用程序错误。在调用-controllerDidChangeContent:期间,从NSFetchedResultsController的委托中捕获到异常。尝试删除第1部分中的第2行,该部分在使用userInfo(null)“
更新之前仅包含1行我不确定为什么会这样。正如我所说,一切似乎都很好,但是当我删除一行时会出现问题。有任何想法吗?我可以根据需要发布代码,但不确定在哪里查看。
这是我的删除代码:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
编辑:也许我做错了,不应该试图在这里强制使用NSFetchedResultsController?
答案 0 :(得分:0)
这是有道理的,因为你只返回一行。
你需要有某种类型的条件。
例如使用bool:
return isDeledted ? 0 : 1 ;
删除后不要返回任何内容,您可以将此bool设置为true。
答案 1 :(得分:0)
您应遵循以下规则:http://aplus.rs/2014/one-not-weird-trick-to-save-your-sanity-with-nsfetchedresultscontroller/
摘要:在您的所有NSFetchedResultsController
委托方法中,检查您是否在窗口中:
if (self.tableView.window == nil) {
[self.tableView reloadData]; // Add this only in begin/end updates
return;
}