gpt4 book ai didi

objective-c - 在 numberOfRowsInSection 中调用 TableView BeginUpdates

转载 作者:行者123 更新时间:2023-11-29 04:14:40 27 4
gpt4 key购买 nike

我有一个由 NSFectchedResultsController 支持的表格 View ,当我没有来自 FRC 的结果时,我尝试显示自定义单元格。我遇到的问题是 BeginUpdates 调用 numberOfRowsInSection。我想保持表格 View 处于事件状态(而不仅仅是在其位置显示图像),以便用户可以执行拉动刷新。

代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([self.fetchedResultsController.fetchedObjects count] == 0) {
if (!specialCellShowing) {
specialCellShowing = TRUE;
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
}
return 1;
}
else {
if (specialCellShowing) {
specialCellShowing = FALSE;
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
}
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
return [self.fetchedResultsController.fetchedObjects count];
}

问题是返回1;陈述。发生的情况是第一次调用 numberOfRowsInSection 时,它设置specialCellShowing = TRUE 并点击开始更新,这会调用 numberOfRowsInSection。 begin 更新方法的实例发现specialCellShowing 为true 并返回1 并退出。现在进行插入调用,然后在 endUpdates 上发生崩溃,因为 TableView 认为表中有 1 个单元格,已插入 1 个单元格,并且之前有 1 个单元格。另一个问题是我需要 return 1 ,因为在后续调用 numberOfRowsInSection 时,我希望它不要弄乱表格,而只是返回说我有一个自定义单元格。

我想我想知道是否有更好的方法来解决这个问题?

最佳答案

当 TableView 更新其显示时,您无法更改 TableView 。除非您要改变 TableView ​​,否则不需要调用deleteRowsAtIndex 路径。您需要有一个单独的方法:响应事件并改变 TableView ​​数据的方法(并且可能调用 begin/endUpdates 并添加或删除行)。 -numberOfRowsInSection 应该只检查支持数据并返回答案。此时 TableView 正在执行完整更新,因此在 TableView 中添加和删除行此时无论如何都是无用的。

关于objective-c - 在 numberOfRowsInSection 中调用 TableView BeginUpdates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887705/

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