-[NSUserDefaults synchronize:]
的文档内容为:
因为此方法会定期自动调用, 只有在您不能等待自动时才使用此方法 同步(例如,如果您的应用程序即将退出)或 如果你想将用户默认值更新为磁盘上的内容,即使如此 你没有做任何改变。
我想知道粗体部分何时可能发生?我的意思是如果没有对用户默认值进行任何更改,那么它会反映磁盘上的值吗?为什么我必须调用synchronize来更新活动对象?我错过了一些明显的东西吗?
答案 0 :(得分:3)
想象一下,当您通过[NSUserDefaults standardUserDefaults]
使用共享默认对象时,磁盘上的plist文件会因任何原因而发生更改。除非您调用synchronize
来更新共享对象,否则您的默认对象将无法识别此更改。
答案 1 :(得分:3)
在iOS上,如果用户在“设置”应用中更新内容,就会发生这种情况。
在OSX上,如果您的偏好设置与其他应用分享,或者系统范围的设置(例如,当前语言)发生变化,则会发生这种情况。但是,从那时起NSUserDefaults已经更新,以便自动处理,并在外部发生变化时重新读取数据。
请注意,对于后一种情况,文档已过期。我已经提交了关于文档的错误报告。
答案 2 :(得分:1)
可以(可以)在应用之间共享用户默认值。有一个全球域名。