我已经构建了一个名为“rmc”的启用 iCloud 的应用程序。我的应用程序现在可以将文件上传到 iCloud Drive 并通过 NSMetadataQuery 获取元数据。但是 NSMetadataQuery 的结果仅包括我的 APP 容器中的文件。请参阅此链接:https://developer .apple.com/videos/wwdc/2015/?id=234,这是一个文件,据说NSMetadataQuery可以获取其他APP容器中的文件。我想要的是我可以获取iCloud Drive中的所有文件,就像应用程序“文档5”和“云精简版”,他们可以获取所有文件。
请看这张图。是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。