iOS 访问iCloud文件 拿不到为nil

file:///private/var/mobile/Library/Mobile%20Documents/comappleCloudDocs/apple.pdf

当我做分享功能的时候, 使用iPhone “文件” APP 选择iCloud中一个文件 选择转发分享至本APP
系统调用一下方法:

  //MARK: 收到分享内容
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{

    NSLog(@"url = %@",url);
    NSString *urlStr = url.absoluteString;
    if ([urlStr containsString:@"file://"]) {
        //收到分享的文件 当是iCloud路径下的文件的时候 发现为nil 
        NSData *data = [NSData dataWithContentsOfURL:url];
        
    }
    return YES;
}

这时候我们发现data 为nil
当访问iCloud文件的时候 属于访问安全资源 需要请求复制 并访问 代码如下:

  [url startAccessingSecurityScopedResource];//fileURL ---> Which FileURL you want to copy
                NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
                NSFileAccessIntent *readingIntent = [NSFileAccessIntent readingIntentWithURL:url options:NSFileCoordinatorReadingWithoutChanges];
                [fileCoordinator coordinateAccessWithIntents:@[readingIntent] queue:[NSOperationQueue mainQueue] byAccessor:^(NSError *error) {
                    NSData *filePathData;
                    if (!error) {
                        // Always get URL from access intent. It might have changed.
                        NSURL *safeURL = readingIntent.URL;
                        filePathData = [NSData dataWithContentsOfURL:safeURL];
                        // here your code to do what you want with this
                        NSLog(@"获取到数据:%@",filePathData);
        
                      }
                    [url stopAccessingSecurityScopedResource];
                }];

这时候filePathData 已经有值了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容