我有一个iPhone应用程序,其中许多域对象都填充了用户输入的数据。为了在中断后恢复状态,这些对象实现NSCoding协议并在applicationWillTerminate消息中写入磁盘(Documents目录)。然后,当再次启动应用程序时,将加载数据字节并重新填充域对象。获取文档目录的代码如下:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
这在模拟器中运行良好,但是一旦我将应用程序部署到iPhone,它就停止了工作。 iPhone错误代码513的原因 - 显然意味着“许可被拒绝”。 iPhone开发文档中有一个说明可以解释一下 -
在设备上,返回路径 (documentsDirectory)类似于 以下: 的/ var /移动/应用/ 30B51836-D2DD-43AA-BCB4-9D4DADFED6A2 /文件
然而,在模拟器上, 返回的路径采用以下方式 形式:
/卷/东西/用户/ JOHNDOE /库/应用程序 支持/ iPhone 模拟器/用户/应用/ 118086A0-FAAF-4CD4-9A0F-CD5E8D287270 /文件
这是我所看到的确切行为。我不确定这是如何与获得权限被拒绝的错误以及我可以做些什么来解决它。它确实在下面说 -
要读写用户首选项, 使用NSUserDefaults类或 CFPreferences API。这些接口 消除你的需要 构建一条路径 库/首选项/目录和 读取和写入首选项文件 直。有关的更多信息 使用这些接口,请参阅“添加 设置包。“
如果您的应用包含声音, 图像,或其他资源 应用程序包,你应该使用 NSBundle类或CFBundle opaque类型 加载这些资源。捆绑有 固有的知识在哪里 资源存在于应用程序内部。 另外,捆绑包都知道了 用户的语言偏好和 能够选择本地化资源 自动超过默认资源。 有关捆绑包的更多信息,请参阅 “应用程序包。”
我不知道如何使用Application Bundle加载数据字节。任何帮助或示例?
答案 0 :(得分:13)
不确定这是如何工作的,但显然使用stringByAppendingPathComponent而不是stringByAppendingString来修复路径问题。
答案 1 :(得分:1)
与应用程序包相关的段落引用:
NSString *path = [[NSBundle mainBundle] pathForResource:@"somefile" ofType:@"png"];
NSBundle中的这个和其他方法允许您从应用程序包内部引用资源,而无需实际知道应用程序包的位置。
免责声明:我没有使用iPhone。
考虑到免责声明,在简单的OS X中,在应用程序包中编写内容被认为是不好的形式。您可以在用户的应用程序支持目录下保存内容 - >请参阅NSApplicationSupportDirectory。
答案 2 :(得分:0)
我收到此错误(513)因为路径错误。仔细检查我的路径修复了问题:)