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文件后重新启动,然后将为已更改的密钥设置新值.
不幸的是,这种解决办法是必要的,但至少它可靠地运作.
这个让我觉得我使用的是完全不同的操作系统(即不是Apple).
可能发生的事情是Mavericks改变了用户默认存储的方式.因此,如果你去删除plist文件,你将搞乱该应用程序的用户默认值.
删除容器(包含plist文件)的正确方法是使用Terminal中的"defaults".我还没有检查过使用'defaults'简单删除是否能正常工作.
要"修复"我的问题,我必须(gulp)重新启动Mavericks.这将清除NSUserDefaults缓存,只有这样,NSUserDefaults才能正常运行.注意:我已经读过注销/登录也可以.
希望有所帮助.凯文
| 归档时间: |
|
| 查看次数: |
2528 次 |
| 最近记录: |