我有一个UIViewController,它显示从在线数据库中提取的数据表。我有一个单身经理来处理这些数据的提取和提供表所需的数据。
这是经理如何运作的一个例子:
@property (nonatomic) NSArray *dataArray;
...
- (void)refreshDataSource
{
[AClass fetchInBackgroundWithCompletionHandler:^(NSArray *objects) {
self.dataArray = [NSArray arrayWithArray:objects];
}
}
...
- (NSArray *)tableViewDataSource
{
return self.dataArray;
}
视图控制器通过调用-refreshDataSource
中的-viewDidLoad
来请求更新,但同时通过指向-tableViewDataSource为其UITableView提供来自管理器的缓存数据。
当视图控制器第一次出现时,一切都很好。我第二次出现相同的视图控制器,应用程序挂起。网络请求也不会触发。
我发现的唯一解决方法是将-refreshDataSource
电话转移到-viewDidAppear:
。但它让我觉得为什么会发生这种情况并让我感到不安,因为这里肯定是错误的。
如果有人能提供任何帮助或建议,那就太棒了!
答案 0 :(得分:0)
你的问题没有解释所有问题,但这里有一些可能对你有用的想法。
1)viewDidLoad仅在您的视图第一次加载时调用。如果切换到另一个视图,然后返回到tableView,则不会调用refreshDataSource。
2)viewDidLoad可能在分配和初始化数组之前触发,所以当你刷新数据时它是nil,而viewDidAppear可能没有同样的问题。
如果没有更多信息,我无法给出更具体的答案。你能解释一下“第一次,一切都很好。我第二次去......”更清楚?如果可能的话,一步一步地做。