Ios 使用NSFetchedResultsController的tableView中没有数据视图
我在tableview中使用的是Ios 使用NSFetchedResultsController的tableView中没有数据视图,ios,objective-c,uitableview,core-data,Ios,Objective C,Uitableview,Core Data,我在tableview中使用的是NSFetchedResultsController,它工作正常。我的问题是,当我的\u fetchedResultsController有0行时,我想创建“无数据视图” 我尝试在我的numberOfSectionsInTableView:中创建它,如下所示 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if ([[_fetchedResultController.s
NSFetchedResultsController
,它工作正常。我的问题是,当我的\u 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
我的问题始于我对其行执行删除操作。从技术上讲,我只是使用这个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:
删除,突然这些错误消失了。我不知道这里发生了什么,但我认为我的条件onnumberOfSectionsInTableView:
有一个错误
任何帮助都将不胜感激。非常感谢你 已解决 根据他的回答,在numberOfSectionsInTableView中分配“MyNodeDataView”并设置单独的样式是非常糟糕的做法。因此,我最终在获取的结果控制器委托上修改了我的
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];
}
检查副本。您需要在NSFetchedResultsController委托方法中处理此问题。NSFetchedResultsController“不知道”您是否正在添加自定义单元格和节。它只提供自己的数据,并从自己的帐户中插入单元格和节,如果您已经有单元格和节,则数字不能正确添加upp,您将崩溃。另外,请注意,为什么在numberOfSectionsInTableView中分配“MyNodeDataView”并设置单独的样式?这真的是很糟糕的做法。编辑我删除了重复的标志。提供更多关于如何处理插入和删除等的代码,以便我们更容易找到错误。也许这可以帮助您搜索错误代码:我只想创建无数据视图tbh。那么,您认为我应该如何分配MyNodeDataView并将其作为tableview背景?事先谢谢你,没错。您甚至可以提供一个EmptyDataCell,并在获取的数据为空时返回CellForRowatineXpath中的空单元格。在controller.delegate方法中,当在“空”到“内容”或“内容”到“空”之间切换时,只需重新加载数据。否则就让委托方法正常运行:)谢谢,非常感谢!现在我将尝试修改它的委托。再次感谢你!感谢您发布解决方案。我也有类似的问题。现在修好了。@sweta。听到这个消息我很高兴!