【问题标题】:Reloading a table's data重新加载表的数据
【发布时间】:2012-05-18 14:56:40
【问题描述】:

我有 5 个视图控制器,它们位于导航控制器层次结构中。当我到达我的最后一个视图控制器时,有一个按钮可以让我回到“主页”视图控制器(名为 CardWalletViewController),它是一个表视图控制器。这是我在上一个 VC 中的方法 (PointsResultsVC)

- (IBAction)homePressed:(id)sender {
    NSArray *VCs = [self.navigationController viewControllers];
    [self.navigationController popToViewController:[VCs objectAtIndex:0] animated:YES];
}

CardWalletVC 的单元格被来自 NSUserDefaults 中已保存的 Card 实例的值填充,并且工作正常。

现在,我想要更新我的CardWalletViewController 中的值,这是来自我的PointsResultsVC 的卡片的积分。注意这个点保存在NSUserDefaults中。

在尝试更新我的 CardWalletVC 中显示的值的过程中,我将 [self.tableView reloadData]; 放在了上述类的 -viewDidLoad-viewWillAppear 和 -viewDidAppear 中。我尝试在每个方法中一个一个地放置它,但它似乎不起作用。

请指教。

编辑:问题已解决

这个是我的向导Save data from one tab and reloadData in another tab

正如我发现的那样,某个类的-viewDidLoad 只会被调用一次,在整个应用程序运行时。而-viewWillAppear,每次视图出现时都会调用它。

所以,我只是将加载保存在 NSUserDefaults 中的值的方式从-viewDidLoad 移到了-viewWillAppear。另外,在-viewWillAppear 里面我放置了[self.tableView reloadData]。然后,问题解决了。

【问题讨论】:

  • 你试过在每个 viewWillAppear 和 viewDidAppear 中放置一个 NSLog 吗?然后,看看 NSLog 是否被触发,这样你可以确定它是不是被触发的方法,或者你的表重新加载相同/错误的数据
  • 也许延迟选择器的执行会起作用[self.tableView performSelector:@selector(mySelector:) withObject:NULL afterDelay:2.0];
  • remark : 注意 viewDidLoad 可能会被调用多次(!),这是很多人犯的错误 - 如果你的应用程序收到内存不足警告,你的视图可能会被 iOS 卸载,无论你喜欢它或不。下次您的应用需要显示该窗口时,这将使 viewDidLoad 再次被调用。除此之外,通常您将在 viewWillAppear 或 viewDidAppear 中加载数据,而不是在 ViewDidLoad 中(除非它是真正静态的,但仍然是不好的做法)

标签: iphone ios xcode uitableview reload


【解决方案1】:

有很多事情可能出了问题,因此您需要提供更多信息来缩小范围。

首先,viewDidLoad 不会被调用,所以你可以从这里移除它。 viewWillAppear 和 viewDidAppear 都会被调用,所以你只需要这两种方法之一。

接下来,您需要确定实际问题是什么。

1 - self.tableView 是对表格的正确引用吗?您是否正确维护了参考?

2 - 表实际上是在重新加载但使用旧数据,还是根本不重新加载?您可以记录 willDisplayCell 方法以查看视图出现时发生的情况。

利用这些信息,可以将根本原因缩小为可解决的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多