我在in 4.0的[NSUserDefaults standardUserDefaults]中遇到了一个问题。
我使用[[NSUserDefaults standardUserDefaults] setObject:self.listData forKey:@"listData"];在applicationDidEnterBackground:和applicationWillTerminate:方法中保存了一些状态。我通过在NSMutableArray *listData = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:@"listData"]];方法中使用viewDidLoad检索数据。
我正在使用sdk4.1和模拟器进行测试。问题是:当我的应用程序进入后台时,它确实调用了保存方法。因为我想知道它是否真的被保存了,所以我双击home按钮来调用多任务堆栈并按住home按钮,然后使用负图标在后台杀死我的应用程序。然后我再次输入应用程序,但是数据并没有被保存。
然后,我选择属性应用程序不运行在info.plist中的背景中,以查看它是否在iOS3.0中工作。当我点击home按钮,它被称为保存方法,然后我进入应用程序,数据已经成功保存。
所以我想知道在how 4.0中[NSUserDefaults standardUserDefaults]是如何工作的?如何使用iOS4.0中的数据来保存数据呢?很多东西!
发布于 2010-10-19 02:13:37
更确切地说,[NSUserDefaults standardUserDefaults]是一个指针,指向闪存上默认文件的副本,而不是默认文件本身。当您进行更改时,您只修改此临时副本。只有当[NSUserDefaults synchronize]被调用时,它才会被写入闪存。当程序退出时,您应该调用它。
实际上,您的程序可能运行得很好。真正的问题是,从多任务处理栏中删除应用程序并不会调用所有的应用程序退出函数,它只会终止这个过程,就像OSX中的Force call (可能与Force退出完全一样)。
您的应用程序不需要多任务处理,因为默认情况是用applicationWillTerminate编写的,然后在正常的退出过程中调用NSUserDefaults同步。
如果您希望您的首选项能够在用户发起的强制退出中生存,则应在更改它们时写入默认设置,并将同步调用放入applicationDidEnterBackground中。
发布于 2010-10-19 02:04:26
别干那事。我的意思是,不要在去bg之前保存prefs,因为它什么都不做。事实上,你应该读一下说明书。nsuserdefaults在两种不同的情况下保存您的首选项:
的时间量
如果在去bg的路上保存prefs,上述任何一个都不适用,因此prefs不会被保存。
https://stackoverflow.com/questions/3964808
复制相似问题