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