我已经构建了一个名为“rmc”的支持iCloud的应用程序。我的应用程序现在可以将文件上传到iCloud Drive并通过NSMetadataQuery获取元数据。但是NSMetadataQuery的结果只包含我APP的Container中的文件。请看这个链接:{{ 3}}, 这是一个文档,据说NSMetadataQuery可以在其他APP的容器中获取文件。我想要的是我可以获取iCloud Drive中的所有文件,就像应用程序“Document 5”和“Cloud Lite”一样,它们可以获得所有文件文件。 https://developer.apple.com/videos/wwdc/2015/?id=234
请看这张照片。它是APP“文档5”的UI。这个APP可以获取iCloud Drive的根目录信息。但我的应用程序只能获取“rmc”文件夹中的文件。我也想获取iCloud Drive中的所有目录和文件。就像“文档5”那样。我希望有人能帮助我理解我的问题,因为我的英语很倾心。谢谢!!! 这是我的代码:
- (BOOL)getFiles
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *cloudURL = [fileManager URLForUbiquityContainerIdentifier:nil];
self.query = [[NSMetadataQuery alloc]init];
self.query.predicate = [NSPredicate predicateWithFormat:@"%K like '*'",NSMetadataItemFSNameKey]; // all
self.query.searchScopes = [NSArray arrayWithObjects:NSMetadataQueryUbiquitousDocumentsScope,NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope,nil];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(getFilesFinished:)
name:NSMetadataQueryDidFinishGatheringNotification
object:nil];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(getFilesFinished:)
name:NSMetadataQueryDidUpdateNotification
object:nil];
[self.query startQuery];
return YES;
}
此方法使用NSMetadataQuery从iCloudDrive获取元数据。我设置了searchScopes = [NSArray arrayWithObjects:NSMetadataQueryUbiquitousDocumentsScope,NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope,nil];
这是Apple关于此值的文档: NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope 在应用程序容器外搜索文档。此搜索可以找到用户先前使用文档选择器视图控制器打开的iCloud文档。这使您的应用可以再次访问文档,而无需直接用户交互。结果的NSMetadataItemURLKey属性返回安全范围的NSURL。有关使用安全范围URL的更多信息,请参阅NSURL类参考中的安全范围URL。