NSUserDefaults和查询在Mavericks Mac OSX 10.9中不起作用

Stu*_*ner 10 macos ios osx-mavericks

我已经安装了Mac OSX Mavericks的预发布版本(10.9).我的申请包含

  NSUserDefaults *preferences = [[NSUserDefaults standardUserDefaults] retain];
    [preferences setInteger:[_lblSetValue integerValue] forKey:@"execute"];
[defaults synchronize];
Run Code Online (Sandbox Code Playgroud)

由于NSUserDefauls将其值存储在库中的Plist文件 - >首选项 - > appbundlename.plist中.如果我更改了Plist文件中的值..并再次启动应用程序并通过以下方式访问该值:

id abc = [preferences valueForKey:@"execute"];
Run Code Online (Sandbox Code Playgroud)

然后它给了我以前的值而不是最终改变的值.当我在Plist文件中再次检查时,保存更改值.

例:

像最初一样,我为密钥执行设置了值1234,然后停止应用程序并将Plist文件中的值更改为路径库 - >首选项 - > appbundlename.plist到1000,然后再次启动应用程序并通过

 id abc = [preferences valueForKey:@"execute"];
Run Code Online (Sandbox Code Playgroud)

它给了我1234而不是1000.然后..问题是..如果方法valueForKey没有采用更改的值,则访问该值.

我需要获得Plist的更改值.因为它给我在Loin/Mountain Loin中的正确价值,但在小牛队中没有.

请帮忙.

小智 12

我解决这个问题的方法是在更改.plist文件后终止'cfprefsd'守护程序进程:

ps auwx | grep cfprefsd | grep -v grep | awk'{print $ 2}'| xargs sudo kill -9

守护进程将在下次访问.plist文件后重新启动,然后将为已更改的密钥设置新值.

不幸的是,这种解决办法是必要的,但至少它可靠地运作.


Sho*_*oes 5

这个让我觉得我使用的是完全不同的操作系统(即不是Apple).

可能发生的事情是Mavericks改变了用户默认存储的方式.因此,如果你去删除plist文件,你将搞乱该应用程序的用户默认值.

删除容器(包含plist文件)的正确方法是使用Terminal中的"defaults".我还没有检查过使用'defaults'简单删除是否能正常工作.

要"修复"我的问题,我必须(gulp)重新启动Mavericks.这将清除NSUserDefaults缓存,只有这样,NSUserDefaults才能正常运行.注意:我已经读过注销/登录也可以.

希望有所帮助.凯文