我的应用程序具有两种状态:已登录和未登录,并且具有以下架构(大大简化了):
-ViewController A,其中包含一个搜索框和一个表视图。
-用于登录应用程序的ViewControllerB。
流程如下:
-用户未登录;
-A被压入堆栈。在“viewWillAppear
我检查用户是否已登录”中,如果是,则正在发出异步网络请求,完成后,该表将从网络中装入数据。但是,由于此时用户尚未登录,因此表视图为空;因此,表视图为空。
-用户点击搜索框;因为他尚未登录,所以B被推送(在确认之后);
-他成功登录B,然后按一个按钮,弹出B并再次显示A;
-此时,由于他已登录,因此viewWillAppear
我发出了异步请求;
-完成后,我调用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:
再也不会遇到断点了。
tableView:cellForRowAtIndexPath:
不是cellForRowAtIndexPath:
。