OGeek|极客世界-中国程序员成长平台

标题: ios - 无法写入文档目录 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 06:49
标题: ios - 无法写入文档目录

我正在尝试将 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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4