gpt4 book ai didi

ios - UITableView cellForRowAtIndexPath 被提前调用

转载 作者:行者123 更新时间:2023-11-28 18:10:35 26 4
gpt4 key购买 nike

我有一个 UITableView 可以在第一次调用时很好地加载它的数组项。但是,当我刷新 tableview 时,它会崩溃,因为委托(delegate)方法 cellForRowAtIndexPath 被提前调用。我有一个整数代表我的主数据数组的索引,它在我的刷新按钮中被重置为 0。但是它崩溃了,因为它试图在重置之前重新加载数据。我通常会使用 indexPath.row 作为我的索引,但是数组很复杂并且 indexPath.row 与我想为每个单元格显示的内容不匹配。继承人一些代码,任何帮助表示赞赏。

当我下拉刷新并在 viewDidLoad 中准备数据时调用此方法

- (IBAction)refresh:(id)sender {
itemIndexer = 0;
[sender beginRefreshing];
[self loadData];
}

我的 loadData 方法的一部分

-(void) loadData {
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.Foo.myqueue", 0);
dispatch_queue_t mainQueue = dispatch_get_main_queue();

dispatch_async(backgroundQueue, ^{

[self downloadData];

dispatch_async(mainQueue, ^{
[self.tableView reloadData];
[_rcRefresh endRefreshing];
});
});

在 viewDidLoad 中,我调用初始加载 TableView :

[self refresh:_rcRefresh];

我得到一个超出数组错误范围的索引。我已经使用断点来确定原因,原因很简单,因为根本没有调用刷新,否则 itemIndexer 将设置为 0。相反,它是一个比数组大小大的数字 1。如果真的有必要,我可以发布 cellForRowAtIndexPath 但是我不确定你是否需要它,如果它在第一次调用时有效。所以总而言之,第一次调用 tableview 是有效的,并且数据加载正常,但是刷新导致索引超出数组的范围,就好像 refresh: 从未被调用一样。

最佳答案

对于你所说的,我只能尝试猜测:

  • 您的 numberOfSectionsInTableView/numberOfRowsInSection 返回了错误的数字。

  • 如果 [self downloadData] 是异步的(您正在发出服务器请求而不是等待响应),您应该在获得数据后重新加载数据。

  • 您下载的数据未与您已有的数据正确合并。

更多代码(numberOfSectionsInTableView、numberOfRowsInSection、cellForRowAtIndexPath、downloadData)肯定会有帮助。

关于ios - UITableView cellForRowAtIndexPath 被提前调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298167/

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