有人可以为我澄清一些事情。 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
的新实例或分配新数据源时。“ ?
答案 0 :(得分:0)
你的“completionHandler”是否在主线程上运行?如果没有,或者您不确定,请尝试在主线程上执行代码。因为根据Apple文档,不更新主线程上的UI的结果是不确定的。你可以试试这个:
[getData completionHandler^() // an async db call
{
dispatch_async(dispatch_get_main_queue(), ^{
tableView.dataSource = self;
});
}];