【问题标题】:Tableview reloadData is not being executed -- sometimesTableview reloadData 没有被执行——有时
【发布时间】:2011-09-17 22:11:37
【问题描述】:

我有一个从 2 个不同的地方调用的视图控制器。

1) 我从根控制器调用它。它被显示并填充。添加按钮完美运行。我打开一个模态表单,获取信息并通过它的委托将其返回给视图控制器。

- (void)itemsAddViewController:(AddItemView *)itemsAddViewController didAddItem
  (OrdersDetails *)orderDetail;
{
    if (orderDetail) {
        [orderDetailItems addObject:orderDetail];
}   
[self fetchOrderDetails];
[lineItemsTableView reloadData];
[self dismissModalViewControllerAnimated:YES];

}

但是,当我从另一个视图(在拆分视图的右侧)调用它时,相同的代码不会重新加载表。它添加了数据——如果我离开表单并回来,数据就在那里,但表格视图没有被刷新。当我单步执行代码时,它得到了这条线,然后像看不到它一样越过它。

【问题讨论】:

  • 在一种情况下听起来像 lineItemsTableView nil 但您没有显示足够的代码来确定。您展示此控制器的两种情况有什么不同?
  • 我不认为 lineItemsTableView 是 nil - 它显示现有行,而不是新行。既然您提到了它,它第二次被弹出到模态表单中。那会有什么不同吗?没有那个我也能做到,但我必须重新考虑一些程序流程。
  • 将视图控制器呈现为模式应该没有什么区别,但如果你创建它的方式不同,那么这可能很重要。我不怀疑您的表存在(最终),但怀疑lineItemsTableView 属性在您调用itemsAddViewCOntroller:didAddItem: 时可能不会指向它。视图是否在此时加载?您知道lineItemsTableView 已正确设置吗?同样,如果没有看到更完整的示例,就不可能知道问题出在哪里。
  • 你需要看什么代码?我可以再发一些,我只是不知道什么是相关的。 . .
  • 我认为你在哪里构建你的视图控制器和表格视图是相关的。还要调试itemsAddViewController:didAddItem: 并确认lineItemsTableView 是否为零,这样我就不会浪费您的时间来猜测问题可能是什么。我敢打赌,当您致电 itemsAddViewController:didAddItem: 时,您的表格视图不可见,并且有时已被卸载(取决于您的应用是否收到内存警告)。

标签: xcode ipad uitableview xcode4 reloaddata


【解决方案1】:

当模态视图控制器出现在包含-itemsAddViewController:didAddItem: 的视图控制器上时,底层控制器的视图是不可见的,因此如果控制器收到内存警告将被卸载。

因此,当您调用 -itemsAddViewController:didAddItem: 时,您的视图可能无法加载,并且您的 lineItemsTableView 出口可能是 nil。您对reloadData 的调用需要转移到-viewWillAppear:,以避免假设控制器的视图在不可见时可以具有持久状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 2015-06-29
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    相关资源
    最近更新 更多