gpt4 book ai didi

iphone - cellForRowAtIndexPath : not called

转载 作者:IT王子 更新时间:2023-10-29 07:32:50 25 4
gpt4 key购买 nike

我的应用程序有两种状态:登录和未登录,我有以下架构(大大简化):
- 包含搜索框和表格 View 的 ViewController A。
- 用于登录应用程序的 ViewController B。

流程如下:
- 用户未登录;
- A 被压入堆栈。在 viewWillAppear 中,我检查用户是否已登录,如果是,则发出异步网络请求,一旦完成,表就会加载来自网络的数据。但是由于此时用户没有登录, TableView 是空的;
- 用户点击搜索框;因为他没有登录,B被推送(确认后);
- 他在 B 中成功登录,然后按下一个按钮弹出 B 并再次显示 A;
- 此时,因为他已登录,所以我从 viewWillAppear 执行异步请求;
- 完成后,我在 TableView 上调用 reloadData

我注意到 numberOfRowsInSection: 被调用并返回正确的结果,但是 cellForRowAtIndexPath: 之后没有被调用并且表格仍然是空的。

我已经检查过,在主线程上调用了 reloadData

知道它是什么吗?因为它让我发疯!

谢谢,
S.

编辑:这是 A 中 viewWillAppear 的异步代码。

if ([User isLoggedIn]) {
[self.asyncRequest fetchDataWithCompletionHandler:^(id response, NSError *error) {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if (error) {
[Utils displayError:error];
} else {
self.array = response;

self.isLoaded = YES;
[self.tableView reloadData];
[self.tableView setContentOffset:CGPointMake(0.0f, 0.0f) animated:NO];
}
}];
}

我已经检查了异步请求是否成功完成并且 response 包含正确的数据(这是用于支持 UITableView 的数组)。

reloadData 之后,我在 tableView:numberOfRowsInSection: 中放置了一个断点,它停在那里并返回 array 。然而,在那之后,tableView:cellForRowAtIndexPath: 中的断点永远不会命中。

最佳答案

为什么会调用 numberOfRowsInSection 而不会调用 cellForRowAtIndexPath 的一个有效场景是当表的大小或位置不需要显示任何行时。

例如,假设您有一个 20 像素高的表格,但第一部分的标题为 30 像素高并且您为标题返回了 nil(或者没有实现 viewForHeaderInSection)。在这种情况下,将不会显示任何行,并且看起来就像表格不存在一样。

我看到您正在使用 IB。表格的大小在 IB 中可能具有欺骗性,因为它假设了页眉和页脚的大小。我会记录表格的框架,以便您了解应用程序运行时的位置(相对于它在 IB 中出现的位置)。 调用 reloadData 之前,我还会确保手动调整表格框架的大小和位置。这将解决未调用 cellForRowAtIndexPath 的有效情况。

关于iphone - cellForRowAtIndexPath : not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7712325/

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