ash*_*ian 2 beta copy device nsfilemanager ios9
很长一段时间我收到一个奇怪的错误,但只有在设备上运行时才会收到.在模拟器中一切都很好.我所做的是将示例文件从app bundle目录移动到设备上的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
Run Code Online (Sandbox Code Playgroud)
每个人都会抛出如下错误:
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 =(Link),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"不允许操作"}} - [AppDelegate fillDirectoryWithSamplesIfEmpty]
我怎么解决这个问题?
更新:这里找到的解决方案确实有效!祝好运!
您无法将捆绑文件移动到文档目录,因为您没有权限.尝试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);
Run Code Online (Sandbox Code Playgroud)
以上代码在iPhone5设备iOS9.0中运行良好.仍有问题,请粘贴您的代码段