【问题标题】:Why would I need to synchronize NSUserDefaults if I haven't made changes?如果我没有进行更改,为什么我需要同步 NSUserDefaults?
【发布时间】:2014-01-01 06:08:26
【问题描述】:
-[NSUserDefaults synchronize:] 的文档内容如下:
因为此方法会定期自动调用,
仅当您不能等待自动
同步(例如,如果您的应用程序即将退出)或
如果您想更新用户默认为磁盘上的内容,即使
您没有进行任何更改。
我想知道粗体部分什么时候会出现?我的意思是如果没有对用户默认值进行更改,那么它会反映磁盘上的值吗?为什么我必须调用同步来更新活动对象?我错过了什么明显的东西吗?
【问题讨论】:
标签:
ios
macos
cocoa-touch
cocoa
nsuserdefaults
【解决方案1】:
在 iOS 上,如果用户在“设置”应用中更新了某些内容,就会发生这种情况。
在 OSX 上,如果您的偏好设置与其他应用程序共享,或者系统范围的设置(例如,当前语言)发生更改,通常会发生这种情况。但是,从那时起 NSUserDefaults 已更新为自动处理此问题,并在外部发生更改时重新读取数据。
请注意,对于后一种情况,文档已过期。我已经提交了关于文档的错误报告。
【解决方案2】:
想象一下,当您通过[NSUserDefaults standardUserDefaults] 使用共享默认对象时,磁盘上的 plist 文件会由于任何原因而更改。除非您调用 synchronize 来更新您的共享对象,否则您的默认对象将无法识别此更改。
【解决方案3】:
用户默认设置可以(可以)在应用之间共享。有一个全局域。