• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 无法写入文档目录

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:49:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试将 json 文件从应用程序包复制到 Document 目录,但令人惊讶的是我无法做到这一点。代码如下:

NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [array lastObject];
NSString *path   = [docDir stringByAppendingPathExtension"themes.json"];

if (![[NSFileManager defaultManager] fileExistsAtPath:path])
   {
     NSString *themesPath = [[NSBundle mainBundle] pathForResource"themes" ofType"json"];
     NSError  *error      = nil;

    [[NSFileManager defaultManager] copyItemAtPath:themesPath toPath:path error:&error];

     if (error)
        NSLog(@"Error %@", error);
  }

它会产生以下错误:

Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn’t be completed. (Cocoa error 513.)" UserInfo=0x194a0e90 {NSSourceFilePathErrorKey=/var/mobile/Applications/ACED3EF9-B0D8-49E8-91DE-37128357E509/Frinder.app/themes.json, NSUserStringVariant=( Copy ), NSFilePath=/var/mobile/Applications/ACED3EF9-B0D8-49E8-91DE-37128357E509/Frinder.app/themes.json, NSDestinationFilePath=/var/mobile/Applications/ACED3EF9-B0D8-49E8-91DE-37128357E509/Documents.themes.json, NSUnderlyingError=0x194a0400 "The operation couldn’t be completed. Operation not permitted"}

经过搜索,我找到了 this question并尝试修改我的代码如下:

 if (![[NSFileManager defaultManager] fileExistsAtPath:path])
    {
       NSString *themesPath = [[NSBundle mainBundle] pathForResource"themes" ofType"json"];
       NSData   *data       = [NSData dataWithContentsOfFile:themesPath];

       BOOL success =  [[NSFileManager defaultManager] createFileAtPath:path contents:data attributes:nil];

       if (!success)
          NSLog(@"Fail"); 
    }

但它也不起作用。 success 变量为 NO。我尝试的最后一件事是:

[data writeToFile:path atomically:YES];

但还是徒劳。它返回 NO

我需要注意,问题仅出现在设备上。在模拟器上它工作得很好。 谁能给我一个线索?



Best Answer-推荐答案


第一个例子有一点是正确的:

[docDir stringByAppendingPathExtension"themes.json"];

应该是:

[docDir stringByAppendingPathComponent"themes.json"];

这很清楚我们您阅读了错误消息,您会看到它尝试将文件写入 /var/mobile/Applications/ACED3EF9-B0D8-49E8-91DE-37128357E509/Documents.themes.json。注意有一个 . 应该有一个 /.

stringByAppendingPathExtension: 用于为文件添加扩展名,jpgtxthtml、 .....

stringByAppendingPathComponent 将文件添加到路径中,通过添加正确的目录分隔符,您的大小写为 /

您的第二个示例肯定会失败,因为应用程序包是只读的。

关于ios - 无法写入文档目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22194890/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap