从背景返回时重新加载视图

时间:2010-10-23 06:41:21

标签: iphone ios objective-c cocoa-touch

使用iPhone SDK 4.1。有时,当从iPhone 3GS设备上的背景状态返回时,返回的视图丢失了其中一个图像或标签。 viewDidAppear方法 从后台返回时不会被调用。有没有办法强迫 重新加载视图以便调用这些方法吗?

1 个答案:

答案 0 :(得分:3)

如果您的应用因尝试在ram中存储过多数据(在本例中为图像)而收到内存警告,则通常会发生这种情况。

要测试是否是这种情况,您可以在didReceiveMemoryWarning消息中执行NSLog调用,或者您可以继承UIImage并扩展其dealloc并在其中放置一条NSLog消息,说出“正在释放图像”,然后检查是什么获得的写到控制台。如果你想在没有调试器的情况下检查它(因此没有控制台),你可以在最前面的主窗口xib内创建一个调试UILabel(因此它始终可见),其文本值被设置而不是写入NSLog。通过这种方式,即使您返回计划后,您也可以看到发生了什么。

最好的办法是将didReceiveMemoryWarning与UILabel对象一起使用。

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
  debugLabel.text=@"Did receive memory warning";
}

要解决问题(即重新加载图像),您可以注册该视图以进行接收 来自通知中心的UIApplicationWillEnterForegroundNotification,然后调用必要的重新加载调用,即检查哪些图像为零(已被释放)并应重新加载。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewNeedsReload) name:UIApplicationWillEnterForegroundNotification object:nil];

- (void) viewNeedsReload
{
  //Check validity of each image here and reload if necessary
}