我如何修复Cocoa错误513?

bpa*_*apa 6 iphone cocoa-touch

我有一个iPhone应用程序,其中许多域对象都填充了用户输入的数据.为了在中断后恢复状态,这些对象实现NSCoding协议并在applicationWillTerminate消息中写入磁盘(Documents目录).然后,当再次启动应用程序时,将加载数据字节并重新填充域对象.获取文件目录的代码如下:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

这在模拟器中运行得很好,但是一旦我将应用程序部署到iPhone,它就停止了工作.iPhone错误代码513的原因 - 显然意味着"许可被拒绝".iPhone开发文档中有一个说明可以解释一下 -

在设备上,返回的路径(documentsDirectory)类似于以下内容:/ var/mobile/Applications/30B51836-D2DD-43AA-BCB4-9D4DADFED6A2/Documents

但是,在模拟器上,返回的路径采用以下形式:

/ Volumes/Stuff/Users/johnDoe/Library/Application Support/iPhone Simulator/User/Applications/118086A0-FAAF-4CD4-9A0F-CD5E8D287270/Documents

这是我所看到的确切行为.我不确定这是如何与获得权限被拒绝的错误以及我可以做些什么来解决它.它确实如下 -

要读取和写入用户首选项,请使用NSUserDefaults类或CFPreferences API.这些接口使您无需构建Library/Preferences /目录的路径并直接读取和写入首选项文件.有关使用这些界面的更多信息,请参阅"添加设置包".

如果应用程序包含应用程序包中的声音,图像或其他资源,则应使用NSBundle类或CFBundle opaque类型来加载这些资源.捆绑包具有资源在应用程序内部的固有知识.此外,捆绑包可以识别用户的语言首选项,并且能够自动选择默认资源上的本地化资源.有关bundle的更多信息,请参阅"应用程序包".

我不知道如何使用Application Bundle来加载数据字节.有什么帮助或例子吗?

bpa*_*apa 13

不确定这是如何工作的,但显然使用stringByAppendingPathComponent而不是stringByAppendingString来创建路径来解决问题.