Iphone 与NSUserDefault类相关的问题

Iphone 与NSUserDefault类相关的问题,iphone,Iphone,我正在使用NSUserDefault类为iPhoneOS4.0编写状态维护代码。 当我点击主页,然后点击应用程序,它就工作了,但当我点击主页,然后按下构建和运行按钮,它就不工作了 为什么会这样?当您按下iOS 4上的home(主页)按钮时,应用程序不会停止。它被挂起并进入背景状态。此时将自动维护应用程序UI的状态 当您点击build an go时,应用程序在从Xcode再次运行之前会被强制退出 我假设保存UI状态的代码位于应用程序willterminate方法中。如果是这种情况,那么您的代码将永

我正在使用NSUserDefault类为iPhoneOS4.0编写状态维护代码。 当我点击主页,然后点击应用程序,它就工作了,但当我点击主页,然后按下构建和运行按钮,它就不工作了
为什么会这样?

当您按下iOS 4上的home(主页)按钮时,应用程序不会停止。它被挂起并进入背景状态。此时将自动维护应用程序UI的状态

当您点击build an go时,应用程序在从Xcode再次运行之前会被强制退出

我假设保存UI状态的代码位于
应用程序willterminate
方法中。如果是这种情况,那么您的代码将永远不会在iOS 4上运行,因为不再调用此方法(至少我从自己的测试和其他人的经验中看到过这种情况)。在应用程序被强制退出的情况下(即,当点击build和run时通过Xcode),将绕过
应用程序终止
方法

相反,您应该实现
applicationidenterbackground
applicationWillEnterForeground
方法

这样,每当应用程序处于后台时,它都会将其状态写入
NSUserDefaults
,确保在退出应用程序之前保存状态

在iOS 4上,真正完全退出应用程序的唯一方法是使用多任务UI(双击home按钮),强制退出应用程序。这就是为什么实现上述后台方法很重要的原因,因为它们更有可能被执行


最后请注意,在编写UI状态之后,在
NSUserDefaults
实例上调用
synchronize
可能是值得的,这只是为了确保默认值在当时写入磁盘。

还有一个调用willresignactive(查找名称),当按下Home按钮时会调用该调用。是的,
applicationWillResignActive
applicationdidebecomeactive
。当系统以警报、多任务控制、来电等方式中断应用程序时,也会调用这些方法。感谢您的提醒。