objective-c - Lion 下的 NSUserDefaults 和沙盒

标签 objective-c plist osx-lion nsuserdefaults sandbox

根据 Apple 的要求移动我的一个项目以支持沙盒。我像这样使用 UserDefaults:

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

在我启用沙盒之前,一切都按预期工作。如果我启用了沙盒,该应用程序会在其沙盒目录 (.plist.lockfile) 中创建一个锁定文件,并且不会创建实际的 .plist 文件。

我做错了什么以及如何在沙盒环境下将我的设置存储在 UserDefaults 中?

更新:在单独的 Mac 上安装了带有最新 Xcode 的全新 10.7.3 - 同一项目编译并在启用沙盒的情况下运行良好。

我还尝试在我的 Mac 上运行这个项目,其中沙箱在不同的用户帐户(新创建的)下无法运行,结果完全相同 - 不行。在这一点上,我认为问题出在这个特定 mac 上的系统配置上。问题是 - 假设我是唯一遇到这个奇怪问题的人是否安全?应该不是……

最佳答案

那应该没问题。如果首选项系统能够创建锁定文件,则意味着您的应用程序具有在该目录中创建文件的适当权限,并且已正确查找应放置文件的位置。因此,一定是其他地方出了问题。

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

(另外:一般来说 -synchronize 不是必需的,只会让你的应用变慢,NSUserDefaults 会自己处理)

关于objective-c - Lion 下的 NSUserDefaults 和沙盒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268547/

相关文章:

c++ - 你能在 Cocoa (Obj-C) 项目中使用 C++ 库吗?

iOS 编程 - pList 或 .sqlite3 数据库?

objective-c - 从 Objective-C 中的 bz2 文件读取日志文件

cocoa - 在其边界之外绘制 NSTableView 的背景

objective-c - 修复 iPhone 内存泄漏,入门

objective-c - 如何为 ivar 编写我自己的 setter,即 : self. ivar = ...?

ios - 等待 block 完成以重新加载 UITableView 数据

iphone - 如何以编程方式获取 NSDate plist 表示形式?

iphone - 来自 Plist 的凭据匹配

java - 使用兼容性 API