ios - 将文件从 iOS 11 Files 应用程序复制到沙箱

标签 ios objective-c files-app

我想将文件从 iOS 11 Files 应用程序复制到我的本地应用程序沙箱。出于测试目的,假设文件在"file"应用程序中本地可用(从 iCloud 下载到本地存储)。文件扩展名已在我的应用程序中注册,当在"file"应用程序中按下文件时,我的应用程序会从"file"应用程序接收文件 URL:

NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];

NSURL *nsUrl; // comes from Files app. For instance "file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/test.rar"
NSURL *targetUrl; // file in my app's document directory

NSError *coordinatorError = nil;
[fileCoordinator coordinateReadingItemAtURL:nsUrl options:NSFileCoordinatorReadingWithoutChanges error:&coordinatorError byAccessor:^(NSURL *newURL) 
{   
    NSFileManager *fileManager = [NSFileManager defaultManager];
    //if ([fileManager fileExistsAtPath: [nsUrl path]])
    {
        NSLog(@"Copy from %@ to %@", newURL, targetUrl);

        NSError *copyError = nil;
        [fileManager copyItemAtURL:newURL toURL:targetUrl error:&copyError];
        if (!copyError)
        {
            // OK
        }
        else
        {
            NSLog(@"Files app error: %@", copyError);
        }
    }
}];

但是操作失败并显示以下输出:
2017-11-22 09:30:28.685127+0100 test[434:40101] Copy from file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/test.rar
 to file:///var/mobile/Containers/Data/Application/01BB33E6-2790-0FD0-8270-000/Documents/test.rar
2017-11-22 09:30:28.687174+0100 test[434:40101] Files app error: Error Domain=NSCocoaErrorDomain Code=257 "The file “test.rar” couldn’t be 
opened because you don’t have permission to view it." 
UserInfo={NSFilePath=/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/test.rar, 
NSUnderlyingError=0x1c084abf0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

获得对外部文件的读取访问权限是否有特殊要求?

问候,

最佳答案

以下是访问文件并在完成后停止的方法。

//To gain access
[nsUrl startAccessingSecurityScopedResource]


//To stop access
[nsUrl stopAccessingSecurityScopedResource]

关于ios - 将文件从 iOS 11 Files 应用程序复制到沙箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47430244/

相关文章:

objective-c - 为什么我的 NSColor 类 NSConcreteData?

ios - 通过 iOS11 files app 在 app 中导入多个文件

iphone - 使用方向调整多个 ImageView 的大小

ios - 如何调用presentViewController?

ios - 我可以控制并发执行的并行度吗?

ios - 是否能够将蓝点放置到我在 MapKit iOS 中的指定位置

ios - 导致链接器错误的外部

ios - "On my iPhone"选项在模拟器中不可见。

ios - UIDocumentPickerViewController 按钮看起来已禁用但有效 - 为什么?

ios - 如何将以下有关 CGContext 的代码转换为 Swift3