我的应用程序有两种状态:已登录和未登录,并且我有以下架构(大大简化):
- ViewController A,包含一个搜索框和一个表视图。
- ViewController B,用于登录应用程序。
流程如下:
- 用户未登录;
- A 被压入堆栈。在viewWillAppear
我检查用户是否已登录,如果是,则正在发出异步网络请求,完成后,表将加载来自网络的数据。然而,由于此时用户尚未登录,因此表视图为空;
- 用户点击搜索框;因为他没有登录,所以 B 被推送(确认后);
- 他在 B 中成功登录,然后按下按钮,弹出 B 并再次显示 A;
- 此时,因为他已经登录,从viewWillAppear
我执行异步请求;
- 完成后,我打电话reloadData
在表视图上。
我注意到的是numberOfRowsInSection:
被调用并返回正确的结果,但是cellForRowAtIndexPath:
之后不会被调用,并且表仍为空。
我已经检查过并且reloadData
在主线程上调用。
知道它会是什么吗?因为它让我发疯!
Thanks,
S.
编辑:这是来自的异步代码位viewWillAppear
in A.
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
).
After reloadData
,我已经在其中放置了一个断点tableView:numberOfRowsInSection:
它停在那里并返回正确的元素数量array
。然而,在那之后,断点tableView:cellForRowAtIndexPath:
永远不会被击中。