【问题标题】:iOS9 NSFileManager asks for permission to save files in Documents directoryiOS9 NSFileManager 请求将文件保存在 Documents 目录中的权限
【发布时间】:2015-11-08 19:52:39
【问题描述】:

很长一段时间以来,我都会收到一个奇怪的错误,但仅限于在设备上运行时。在模拟器中一切都很好。我所做的是将示例文件从应用程序包目录移动到设备上的 Documents 目录。 我已经为 NSFileManager 尝试了所有这些方法:

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
- (BOOL)linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error

每个人都会抛出如下错误:

2015-08-15 23:14:15.152 app[1010:339938] 错误:错误域 = NSCocoaErrorDomain 代码 = 513““file.txt”无法链接,因为您无权访问“文档” ”。” UserInfo={NSSourceFilePathErrorKey=/var/mobile/Containers/Bundle/Application/verylongid/fastdict.app/Dictionaries/file.txt, NSUserStringVariant=( 关联 ), NSDestinationFilePath=/var/mobile/Containers/Data/Application/verylongid/Documents/file.txt, NSFilePath=/var/mobile/Containers/Bundle/Application/verylongid/fastdict.app/Dictionaries/file.txt, NSUnderlyingError= 0x13666d5a0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not allowed"}} in -[AppDelegate fillDirectoryWithSamplesIfEmpty]

我该如何解决这个问题?

更新:在这里找到的solution 确实有效! 祝你好运!

【问题讨论】:

标签: copy device nsfilemanager ios9 beta


【解决方案1】:

您无法将捆绑文件移动到文档目录,因为您没有这样做的权限。 尝试 copyItemAtPath 还要确保您正确获取文档目录

  NSString *fileName = @"LICENSE.txt";
    NSString *sourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];
    NSData *mainBundleFile = [NSData dataWithContentsOfFile:sourcePath];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectoryPath = [paths objectAtIndex:0];

    [[NSFileManager defaultManager] createFileAtPath:[NSString stringWithFormat:@"%@/%@", documentsDirectoryPath,fileName]
                                            contents:mainBundleFile
                                          attributes:nil];
    NSString* content = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", documentsDirectoryPath,fileName] encoding:NSUTF8StringEncoding
                                                     error:NULL];
    self.label.text = content;
    NSLog(@"file content = %@",content);

以上代码在 iPhone5 设备 iOS9.0 中完美运行。 还是有问题,贴上你的代码sn-p

【讨论】:

  • 只有一行代码。和你写的完全一样。您可以在我的问题帖子中看到错误描述。
  • 您是否在安装了 iOS9 beta 的设备上进行了测试?
  • 天哪...您回答了我三遍,每次似乎您都没有阅读问题。再看一遍!它是 iOS9 的一个问题(它甚至有这样的标签!)。在我写的帖子中,它只发生在设备上,而不是在模拟器中......请多加注意。
  • @AshotVardanian 好吧..酷..只是想重新确认..酷...你还没有发布你的代码sn-p...实际上我没有安装iOS9设备 。它是否适用于安装了 iOS8.x 的设备?
  • @AshotVardanian 更新了答案。该代码在我的 iPhone5 iOS9.0 设备上运行良好。
猜你喜欢
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 2018-12-10
  • 1970-01-01
  • 2011-09-19
相关资源
最近更新 更多