2011-10-24 13 views
6

iCloudのMobile Documentsディレクトリ(〜/ Libraryの下のLionにあるディレクトリ)のユーザーまたはアプリケーションのいずれかで作成されたすべてのディレクトリのリストを読みたいと思います/モバイルドキュメント)。私は、次のコードを試してみましたが、私は実行するクエリは(NSPredicate predicateWithFormat:@"%K.pathExtension = ''", NSMetadataItemFSNameKeyを使用して)私のフォルダを表す任意のオブジェクトが含まれていますiCloud:ユーザーが作成したディレクトリを読み取る方法

iCloud's Mobile Documents

:ここでは、このディレクトリはようになります方法の例です。 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); 
    } 

} 

答えて

0

私は、Mac OS XのライオンでiClouds設定で "ストレージを管理" を見ていました。アプリケーションをクリックすると、別のtxtファイル(矛盾するバージョン)とディレクトリが表示されます。ですから、あなたはラッパー/ファイルパッケージでしか動作し、ディレクトリでは動作しないと仮定しなければなりません。

+0

この問題を回避しましたか?それが価値のあるものであれば、Mountain Lionのユーザーはアプリ内のOpenパネルからフォルダを作成できます。そこに 'NSMetadataQuery' APIを試しましたか?それはiOSでこれがどのように変化しているかのヒントを与えるはずです... – nacho4d

+0

@ nacho4dいいえ、結局私はフォルダーと一緒に行かなかった、申し訳ありません。あなたが言うように、これはM Lionと共に変わるかもしれません。あなたが方法を見つけたら、私に知らせてください。 –

+2

ちょうど記録のために(私はあなたがすでに気づいたと思うので)私はここで回避策を投稿した:http://stackoverflow.com/questions/7873974/returning-a-list-of-directories-with-nsmetadataquery-and-nspredicate/10510752#10510752 – nacho4d

関連する問題