iCloudのMobile Documentsディレクトリ(〜/ Libraryの下のLionにあるディレクトリ)のユーザーまたはアプリケーションのいずれかで作成されたすべてのディレクトリのリストを読みたいと思います/モバイルドキュメント)。私は、次のコードを試してみましたが、私は実行するクエリは(NSPredicate predicateWithFormat:@"%K.pathExtension = ''", NSMetadataItemFSNameKey
を使用して)私のフォルダを表す任意のオブジェクトが含まれていますiCloud:ユーザーが作成したディレクトリを読み取る方法
:ここでは、このディレクトリはようになります方法の例です。 txtファイル(@"%K ENDSWITH '.txt'", NSMetadataItemFSNameKey
を使用)のクエリを実行すると、txtファイルに対してそれぞれ5つのオブジェクトが返されます。したがって、txtファイルを検索することはできますが、ディレクトリは検索しません。 docsを読んで、私はAppleがディレクトリの代わりにNSFileWrapper(ファイルパッケージ)を使うことを提案していることに気づいた。 iCloudはユーザーまたはアプリケーションによって作成されたディレクトリを処理/検出できませんか?ここで
は私のコードです:
-(void)loadDocument {
NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
_query = query;
//Search all files in the Documents directories of the application’s iCloud container directories:
[query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K.pathExtension = ''", NSMetadataItemFSNameKey];
[query setPredicate:pred];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryDidFinishGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:query];
[query startQuery];
}
- (void)queryDidFinishGathering:(NSNotification *)notification {
NSMetadataQuery *query = [notification object];
[query disableUpdates]; // You should invoke this method before iterating over query results that could change due to live updates.
[query stopQuery]; // You would call this function to stop a query that is generating too many results to be useful but still want to access the available results.
[self loadData:query];
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSMetadataQueryDidFinishGatheringNotification object:query];
_query = nil; // we're done with it
}
- (void)loadData:(NSMetadataQuery *)query {
NSLog(@"Query count %i", [query resultCount]);
for (int i=0; i < [query resultCount]; i++) {
NSMetadataItem *item = [query resultAtIndex:i];
NSURL *url = [item valueForAttribute:NSMetadataItemURLKey];
NSLog(@"%i.URL: %@", i, url);
}
}
この問題を回避しましたか?それが価値のあるものであれば、Mountain Lionのユーザーはアプリ内のOpenパネルからフォルダを作成できます。そこに 'NSMetadataQuery' APIを試しましたか?それはiOSでこれがどのように変化しているかのヒントを与えるはずです... – nacho4d
@ nacho4dいいえ、結局私はフォルダーと一緒に行かなかった、申し訳ありません。あなたが言うように、これはM Lionと共に変わるかもしれません。あなたが方法を見つけたら、私に知らせてください。 –
ちょうど記録のために(私はあなたがすでに気づいたと思うので)私はここで回避策を投稿した:http://stackoverflow.com/questions/7873974/returning-a-list-of-directories-with-nsmetadataquery-and-nspredicate/10510752#10510752 – nacho4d