NSUserDefaults和狮子系统下的沙盒化

4

我将我的一个项目调整以支持沙盒化,以符合苹果的要求。我使用UserDefaults来实现:

[[NSUserDefaults standardUserDefaults] setObject:@(myNumber) forKey:myNumberKey];
[[NSUserDefaults standardUserDefaults] synchronize];

在启用沙盒功能之前,所有内容都按预期工作。但是,如果我启用沙盒功能,应用程序将在其沙盒目录(.plist.lockfile)中创建一个锁定文件,并且不会创建实际的.plist文件。
我错过了什么,如何在沙盒环境下将设置存储在UserDefaults中?
更新:在另一台Mac上安装了最新版本的Xcode的10.7.3 - 启用沙箱的同一项目编译并正常运行。
此外,我尝试在不同的用户帐户(全新创建)下运行此项目,结果完全相同 - 无法正常运行。现在,我认为问题出在特定Mac的系统配置上。问题是 - 是否可以安全地假设只有我遇到这个奇怪的问题?可能不会...

我也已经启用了沙盒,但用户默认设置非常好用。我不确定同步方法有什么用处,但在初始化用户默认设置时,我也使用了[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues]; - Daniel
1个回答

2

那应该可以正常工作。如果首选项系统能够创建锁定文件,这意味着您的应用程序具有在该目录中创建文件的适当权限,并且已正确查找了应将它们放置的位置。因此,其他事情必须出了问题。

当发生这种情况时,是否有任何控制台日志记录?-synchronize的返回值是什么?

(附言:通常不需要-synchronize,它只会使您的应用程序变慢,NSUserDefaults会自行处理)


仅在计划在系统有机会完全存储值之前使用数据时需要“同步”,它基本上是默认值的强制保存事件。否则,操作系统将在自己方便时保存数据。 - Bill Burgess
2
不完全正确。如果您希望另一个进程在该时间段内使用数据,则需要它。如果您只在一个进程中访问它(在99%的应用程序中是这种情况),则可以立即使用。 - Catfish_Man
同步返回0(写入失败) - PrimeSeventyThree
是否可能获取应用程序的副本(无论是您的应用程序还是其简化版本),以便我自行调试它?这应该能够起作用。 - Catfish_Man
需要设置好构建沙盒的事情;我已经为框架开发进行了配置,这有点不同的需求。 - Catfish_Man
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接