0

我有一个 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:。但这让我很恼火,为什么会发生这种情况,让我觉得这里一定有问题。

如果有人可以提供任何帮助或建议,那就太好了!

4

1 回答 1

0

您的问题并没有解释一切,但这里有一些想法可能会对您有所帮助。

1) viewDidLoad 仅在您的视图第一次加载时被调用。如果你切换到不同的视图,然后返回到你的tableView,refreshDataSource 将不会被调用。

2) viewDidLoad 可能在分配和初始化数组之前触发,因此在刷新数据时它为零,而 viewDidAppear 可能没有同样的问题。

如果没有更多信息,我无法给出更具体的答案。“第一次,一切都好。第二次去……”你能不能解释的更清楚些?如果可能的话,一步一步地做你所做的。

于 2013-01-13T04:24:19.620 回答