NSUserDefaults'同步方法何时以及为何失败?确保我的值实际写入并提交给NSUserDefaults的最佳方法是什么,所以在应用程序重启后恢复状态不会有任何问题?
答案 0 :(得分:5)
synchronize
方法是围绕CFPreferencesSynchronize
函数的更高级API包装器。文档中没有任何内容,但我认为synchronize
只返回CFPreferencesSynchronize
的结果。由于此CoreFoundation函数可用于同步主机(管理员)和基于网络的首选项,因此在某些情况下可能会失败。
在最常见的情况下,应用程序只是同步其用户域首选项(在当前用户的Library目录中),该功能通常不会失败。我认为忽略synchronize
的返回值是安全的。但那只是我的意见。
答案 1 :(得分:0)
在某些情况下,我的应用尝试使用某个键写入nil值,这导致同步失败。现在我在保存之前检查nil的值,问题是固定的。
答案 2 :(得分:0)
在我的情况下,我错误地使用NSUserDefaults,它将失败。 例如,我定义自己的对象,并将其放入NSUserDefaults或NSDictionary,它可以放,但它会在同步时失败。因为NSUserDefaults不支持所有类型的对象。 据我所知,NSString,NSNumber,NSDictionary ....你可以谷歌它如何使自定义类可以存储在NSUserDefaults。