我已经实现了一个使用UITableViewController/UITableView和Core Data的iPhone应用程序。此外,我使用NSFetchedResultsController来管理表格数据。这一切都非常简单,并且效果很好。然后我决定当没有找到/检索到行时,我应该在UITableView中显示一条消息。经过研究,似乎做到这一点的最好方法(也许是唯一的方法)是返回一个包含该消息的“虚拟”单元。但是,当我这样做时,我从运行系统中得到一个令人厌恶的图表,它抱怨(并且正确地)关于数据不一致:“无效的更新:无效的部分数量。表格视图中包含的部分数量...”。下面是相关的代码:从类似的问题在核心数据UITableView中显示“找不到行”消息
- (NSInteger) numberOfSectionsInTableView: (UITableView *)tableView
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) return 1;
return [[self.fetchedResultsController sections] count];
}
- (NSInteger) tableView: (UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) return 1;
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex: section];
return [sectionInfo numberOfObjects];
}
- (UITableViewCell *) tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) {
UITableViewCell *cell = [[UITableViewCell alloc] init];
cell.textLabel.text = @"No widgets found.";
return cell;
}
STCellView *cell = (STCellView *)[tableView dequeueReusableCellWithIdentifier: @"ShieldCell"];
[self configureCell: cell atIndexPath: indexPath];
return cell;
}
我已阅读和回应似乎我应该使用
insertRowsAtIndexPaths: withRowAnimation:
的“虚拟”的信息行插入到我的表。但是,这也意味着在插入实际行时删除“虚拟”行。我可以做到这一点,但似乎应该有一个更简单的方法来实现这一点。我想要做的就是显示一条消息,指出表中没有行(很简单?)。所以,我的问题是这样的:有没有办法在UITableView中显示消息,而不使用“虚拟”单元格方法,或者有没有办法说服UITableViewController/NSFetchResulsController这只是一个“虚拟”行,他们不应该得到因为它在表格中不是一个真正的行(从我的角度来看),所以感到不安?
你可以提供任何帮助将是非常赞赏(我是一个新手,挣扎到iPhone发展,我想学习的最佳实践)。谢谢。
而不是破解tableview数据源以获得预期的UI为什么不添加“找不到行”消息到tableview头? – Rog
@Rog有用的提示。 +1 –
如果在表格视图中只有一个部分,这是最好的方法。看到我的方法下面的多个部分 – Brett