0

有人可以为我澄清一些事情。苹果文档UITableView

`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 调用返回时,它会用一个包含数据的数组重新加载它。

我正在尝试执行以下操作: In viewDidLoad、 removetableView.dataSource = self;并将其添加到getDataFromDatabase方法中。例如

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

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

4

1 回答 1

0

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

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

}];
于 2013-08-03T14:39:37.037 回答