PDF ファイルを保存および取得できるアプリで iCloud をサポートしたいと考えています。私の質問は「使用せずにiCloudドライブファイルにアクセスする方法UIDocumentPickerViewController
」です。実際には、アプリにカスタム ファイル リストが必要です。
このコードを試しました
- (void) getAllFilesIniCloud
{
queryData = [[NSMetadataQuery alloc] init];
[queryData setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope]];
NSPredicate *pred = [NSPredicate predicateWithFormat: @"%K like '*.'", NSMetadataItemFSNameKey];
[queryData setPredicate:pred];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(queryDidFinishGathering:)
name:NSMetadataQueryDidFinishGatheringNotification
object:queryData];
[queryData startQuery];
}
- (void)queryDidFinishGathering:(NSNotification *)notification
{
NSMetadataQuery *pQuery = [notification object];
[pQuery disableUpdates];
[pQuery stopQuery];
[pFilesArray removeAllObjects];
for (NSMetadataItem *item in [query results])
{
NSURL *url = [item valueForAttribute:NSMetadataItemURLKey];
NSString * name = url.lastPathComponent;
if ([[name pathExtension] isEqualToString:@"pdf"] || [[name pathExtension] isEqualToString:@"PDF"])
{
NSString *fileName = [url.absoluteString lastPathComponent];
if (url && ![pFilesArray containsObject:fileName])
{
[pFilesArray addObject:fileName];
}
}
}
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSMetadataQueryDidFinishGatheringNotification object:pQuery];
queryData = nil;
[pTableView reloadData];
}
また、スコープを試しました
NSMetadataQueryUbiquitousDataScope
NSMetadataQueryUbiquitousDocumentsScope
NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope
このコードがiCloudのアプリディレクトリで正常に機能することを知っています。ただし、ユーザーが Mac の iCloud または Web 経由でファイルを保存する場合、アプリもこのファイルにアクセスできるようにする必要があります。