2010-10-23 78 views
1

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

回答

3

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

要测试是否出现这种情况,您可以在didReceiveMemoryWarning消息中执行NSLog调用,也可以继承UIImage并扩展其dealloc,并在其中放入一条NSLog消息,例如“正在处理图像”,然后检查被写入控制台。如果你想检查它而不在调试器(也就是没有控制台),你可以在mainwindow xib中的最前面创建一个调试UILabel(所以它总是可见的),它的文本值被设置而不是写入NSLog。通过这种方式,即使返回到程序后,也能看到发生了什么。

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

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{ 
    [email protected]"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 
} 
相关问题