Ios NSUserDefaults和query在Mavericks Mac OSX 10.9中不起作用

Ios NSUserDefaults和query在Mavericks Mac OSX 10.9中不起作用,ios,macos,osx-mavericks,Ios,Macos,Osx Mavericks,我已经安装了MacOSX Mavericks(10.9)的预发布版本。我的应用程序包含 NSUserDefaults *preferences = [[NSUserDefaults standardUserDefaults] retain]; [preferences setInteger:[_lblSetValue integerValue] forKey:@"execute"]; [defaults synchronize]; NSUserDefauls将其值存储在Plist文

我已经安装了MacOSX Mavericks(10.9)的预发布版本。我的应用程序包含

  NSUserDefaults *preferences = [[NSUserDefaults standardUserDefaults] retain];
    [preferences setInteger:[_lblSetValue integerValue] forKey:@"execute"];
[defaults synchronize];
NSUserDefauls将其值存储在Plist文件中的Library->Preferences->appbundlename.Plist。。如果我更改了Plist文件中的值。。然后再次启动应用程序并通过以下方式访问值:

id abc = [preferences valueForKey:@"execute"];
然后它给我以前的值,而不是最后更改的值。当我在Plist文件中再次检查时,更改值被保存

例如:

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

 id abc = [preferences valueForKey:@"execute"];
它给我的是1234而不是1000。然后。。问题是。。 如果方法valueForKey未获取更改的值,则从中访问该值

我需要得到Plist的更改值。因为它给了我正确的价值在腰肉/山腰肉,但不是在小牛


请帮助。

您正在呼叫
[defaults synchronize]设置键后

通常,首选项会在适当的时候为您保留,但如果您正在设置它,然后在不久之后访问它,则可能需要执行此操作以强制保存


但如果你这么快就这么做了,我开始怀疑你是否在用它来保存偏好。如果您这样做是为了在程序中传递状态,那么使用NSUserDefaults有更好的方法。

不确定是否还有人对它感兴趣,但是在终端中运行killall-SIGTERM cfprefsd帮助我解决了这个问题。(不确定遇到“首选项未保存”问题的客户是否也必须这样做)。。以下是一些苹果开发者论坛链接来支持我的主张:)


希望有帮助。

在Mavericks应用程序上,设置存储在容器中,如果找不到,OSX会将首选项从应用程序容器复制到
~/Library/preferences/com.example.myapp.plist

但您的问题是,优先级将始终位于应用程序容器中的
.plist
文件,最终
~/Library/Preferences/*.plist
将被忽略或覆盖

要正确操作,请始终使用终端工具
defaults

打开终端并尝试以下操作:

defaults read com.example.myapp
它将弹出正确的默认值,该工具还用于编辑和创建plist文件,您可以

defaults usage
了解它是如何工作的

如果您仍然想知道应用程序容器在哪里,只需将
CD
放入:

~/Library/Containers/com.example.myapp/Data/Library/Preferences/
您将在那里找到它,但实际上不需要手动编辑它,并且始终记住它将覆盖/优先于
~/Library/Preferences
中的plist


您可以在我的

中了解更多信息。我解决此问题的方法是在更改.plist文件后终止“cfprefsd”守护进程:

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

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


不幸的是,这项工作是必要的,但至少它工作可靠。

这项工作让我觉得我使用的是一个完全不同的操作系统(即,不是苹果)

可能发生的是,Mavericks改变了用户默认值的存储方式。因此,如果你去删除plist文件,你会弄乱该应用程序的用户默认设置

删除容器(包含plist文件)的正确方法是使用Terminal中的“默认值”。我还没有检查过使用“默认值”简单删除是否能正常工作

为了“修复”我的问题,我不得不(吞咽)重启小牛队。这将清除NSUserDefaults缓存,只有这样,NSUserDefaults才能正常工作。注意:我已经读到注销/登录也可以工作

希望有帮助。
Kevin

读取刚设置的值时,不需要同步。这取决于调用它的位置。您能检查编辑吗,?。。我找到了它不起作用的原因。。但我不知道辞职是因为它出人意料的行为……这有什么好运气吗?我们在Mavericks上的应用程序的一位用户抱怨说,该应用程序没有保存任何首选项,并在重新启动时返回到旧设置。问题可能是用户在某个时候删除了plist。不支持通过文件系统(比如Finder)修改首选项。重新启动或注销将修复它。谢谢,这节省了我很多时间。