Objective-C NSUserDefaults caching prevents another app from accurately reading changes

蹲街弑〆低调 提交于 2019-12-20 03:43:21

问题


I have one application that sets preferences. It uses those prefs, and so does another application. When I use the following code in the second application, it reads the preferences correctly once.

    NSUserDefaults* settings = [NSUserDefaults standardUserDefaults];
    [settings addSuiteNamed:@"com.WVS.Wrestling-Tools"];
    [settings synchronize]; // this just a shot in the dark.. didn't work

    [self setScoreboardIndex:[settings integerForKey:@"matName"]];

On subsequent calls of the same code, I get the [settings integerForKey:@"matName"] is always the value that was first read.

In the first application, I'm using the Shared User Defaults Controller to read/write the preferences. Not sure if that matters to this issue or not.

How can I force the second application to always get the most recent values?


回答1:


You should be able to call +[NSUserDefaults resetStandardUserDefaults] in the second program to force +[NSUserDefaults standardUserDefaults] to create a new instance and reload values from disk the next time it's called. Calling -synchronize in the first program is the correct approach to make sure the updated defaults are written to disk (I'm not sure how NSUserDefaultsController behaves in this regard).

Note that calling +[NSUserDefaults resetStandardUserDefaults] every time you access the standardUserDefaults may result in a performance penalty if you do so frequently, since it will presumably mean a disk hit on every read.



来源:https://stackoverflow.com/questions/10667848/objective-c-nsuserdefaults-caching-prevents-another-app-from-accurately-reading

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!