我在tableview中使用NSFetchedResultsController
,它运行正常。我的问题是,我想创建"没有数据视图"当我的_fetchedResultsController
有0行时。
我尝试在我的numberOfSectionsInTableView:
中创建它
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if ([[_fetchedResultController.sections firstObject] numberOfObjects] == 0) {
MyNoDataView *view = [[MyNoDataView alloc] initWithFrame:tableView.frame];
tableView.backgroundView = view;
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
return 0;
}
else {
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
tableView.backgroundView = nil;
return 1;
}
}
效果很好。如果尚未插入数据,则表明没有数据视图,如果有数据,则会显示我的tableview。
当我在其行上执行删除操作时,我的问题就开始了。从技术上讲,我只是使用isActive
fetchRequest
中将其对象属性(fetchedResultController
)更新为我的NSPredicate
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isActive == %@ ", @YES];
[fetchRequest setPredicate:predicate];
然后,如果只有一行,并且我将其删除,则会出现此错误
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView internal bug: unable to generate a new section map with old section count: 1 and new section count: 0'
所以我尝试删除numberOfSectionsInTableView:
,突然间那些错误消失了。我不知道这里发生了什么,但我认为我对numberOfSectionsInTableView:
的条件有误。
任何帮助将不胜感激。非常感谢你!
答案 0 :(得分:1)
<强>解决强>
基于Sneak的答案,分配&#34; MyNoDataView&#34;并在numberOfSectionsInTableView中设置seperatorstyles实际上是非常糟糕的做法。所以我最终修改了获取结果控制器委托的controllerDidChangeContent:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
// The fetch controller has sent all current change notifications, so tell the table view to process all updates.
if ([controller.fetchedObjects count]) {
self.tableView.backgroundView = nil;
}
else {
MyDataView *view = [[MyDataView alloc] initWithFrame:self.tableView.frame];
self.tableView.backgroundView = view;
}
[self.tableView endUpdates];
}