【发布时间】:2010-12-04 14:11:36
【问题描述】:
NSUserDefaults 的同步方法何时以及为什么会失败?确保我的值实际写入并提交给 NSUserDefaults 的最佳方法是什么,这样在应用程序重新启动后恢复状态不会有任何问题?
【问题讨论】:
标签: iphone nsuserdefaults synchronize
NSUserDefaults 的同步方法何时以及为什么会失败?确保我的值实际写入并提交给 NSUserDefaults 的最佳方法是什么,这样在应用程序重新启动后恢复状态不会有任何问题?
【问题讨论】:
标签: iphone nsuserdefaults synchronize
synchronize 方法是围绕CFPreferencesSynchronize 函数的更高级别的 API 包装器。文档中没有任何内容,但我认为synchronize 只是返回CFPreferencesSynchronize 的结果。由于此 CoreFoundation 功能可用于同步主机(管理员)和基于网络的首选项,因此在某些情况下可能会失败。
在最常见的情况下,应用程序只是同步其用户域首选项(在当前用户的库目录中),该功能通常不会失败。我认为忽略synchronize 的返回值是安全的。但这只是我的看法。
【讨论】:
在某些情况下,我的应用程序试图用某个键写入 nil 值,这导致同步失败。现在我在保存之前检查 nil 的值,问题就解决了。
【讨论】:
在我的情况下,我错误地使用了 NSUserDefaults,它会失败。 比如我定义了自己的对象,放到NSUserDefaults或者NSDictionary里面,可以放入,但是同步的时候会失败。因为 NSUserDefaults 不支持所有类型的对象。 据我所知,NSString、NSNumber、NSDictionary....你可以google一下如何让自定义类可以存储在NSUserDefaults中。
【讨论】: