我有一个使用共享用户默认控制器的首选项窗格,它读取和保存首选项小菜一碟。似乎当对字段进行更改时,它们并没有立即保存到 plist 文件中。当我的应用程序需要在更改完成后立即重新读取文件并且 plist 仍未更新时,这会产生问题。
如何强制首选项窗格立即更新首选项文件?
我有一个使用共享用户默认控制器的首选项窗格,它读取和保存首选项小菜一碟。似乎当对字段进行更改时,它们并没有立即保存到 plist 文件中。当我的应用程序需要在更改完成后立即重新读取文件并且 plist 仍未更新时,这会产生问题。
如何强制首选项窗格立即更新首选项文件?
这将自动将您立即所做的任何更改保存到磁盘:
NSUserDefaultsController *controller = [NSUserDefaultsController sharedUserDefaultsController];
[controller setAppliesImmediately:YES];
如果您只在特定情况下需要它,您还可以使用并节省一些昂贵的 I/O(您确实应该尝试让缓存机制尽可能多地缓存,而不是立即将所有内容写入磁盘):
NSUserDefaultsController *controller = [NSUserDefaultsController sharedUserDefaultsController];
[controller save:self];
另外,您确定您正在尝试解决正确的问题吗?您始终可以通过查询NSUserDefaults
您不需要关心当前版本是缓存在 RAM 中还是已写入磁盘的位置来获取用户默认值的最新版本。
根据文档:
[userDefaults save:self];
或者
[userDefaults setAppliesImmediately:YES];