【发布时间】: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