当uitableview调用reloaddata时

时间:2013-08-03 11:01:39

标签: ios uitableview datasource

有人可以为我澄清一些事情。 UITableView的Apple文档说

`UITableView` overrides the layoutSubviews method of `UIView` so that it calls reloadData only when you  create a new instance of `UITableView` or when you assign a new data source. 

我收到以下行为:

在我的viewDidLoad中,我有tableView.dataSource = self.

在我的getDataFromDatabase中,我致电[tableView reloadData]。这似乎工作正常,但我认为正在发生的事情是表中正在填充一个空白数组,然后,当db调用回来时,它正在重新加载带有数据的数组。

我正在尝试执行以下操作: 在viewDidLoad中,移除tableView.dataSource = self;,然后将其添加到getDataFromDatabase方法中。 e.g。

(void)getDataFromDatabase
{
    [getData completionHandler^() // an async db call
    {
        tableView.dataSource = self;
    }];
}

这似乎不起作用。该表未填充。如果我在设置[tableView reloadData]之后添加dataSource = self,它会起作用,但是从文档中,当我设置reloadData时它不应该自动调用dataSource = self它只调用reloadData时您创建UITableView的新实例或分配新数据源时。“ ?

1 个答案:

答案 0 :(得分:0)

你的“completionHandler”是否在主线程上运行?如果没有,或者您不确定,请尝试在主线程上执行代码。因为根据Apple文档,不更新主线程上的UI的结果是不确定的。你可以试试这个:

[getData completionHandler^() // an async db call
{
    dispatch_async(dispatch_get_main_queue(), ^{
        tableView.dataSource = self;
    });

}];