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 已经有值了