gpt4 book ai didi

iphone - 使用 Core Data 在 UITableView 中显示 "No rows found"消息

转载 作者:行者123 更新时间:2023-12-03 18:37:26 25 4
gpt4 key购买 nike

我已经实现了一个使用 UITableViewController/UITableView 和 Core Data 的 iPhone 应用程序。此外,我使用 NSFetchedResultsController 来管理表数据。这一切都非常简单并且效果很好。然后,我决定当没有找到/检索到行时,应该在 UITableView 中显示一条消息。经过研究后,似乎最好的方法(也许是唯一的方法)是返回包含该消息的“虚拟”单元格。然而,当我这样做时,我从运行时系统收到一个令人讨厌的图,它提示(并且理所当然地)数据不一致:“无效更新:无效的节数。 TableView 中包含的节数......”。相关代码如下:

- (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 标题中。

关于iphone - 使用 Core Data 在 UITableView 中显示 "No rows found"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12231373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com