【问题标题】:when uitableview calls reloaddata当 uitableview 调用 reloaddata
【发布时间】:2013-08-04 14:57:30
【问题描述】:

谁能为我澄清一些事情。 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 方法中添加它。例如

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

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

【问题讨论】:

  • 请在从数据库中获取详细信息后检查您的阵列。如果您的查询无法获取记录,那么哪些数据将在表视图中重新加载
  • @Jason 给定的代码有许多拼写错误。也许这只是一个问题。请复制并粘贴编译器能够正确解析的代码。

标签: ios uitableview datasource


【解决方案1】:

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

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

}];

【讨论】:

  • 嗨 liuyadong - 谢谢。我试过这个,但它似乎仍然不起作用。还有其他想法吗?很奇怪……
猜你喜欢
  • 2010-12-17
  • 2011-09-18
  • 2023-03-30
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2011-02-03
  • 1970-01-01
相关资源
最近更新 更多