iCloud: Как читать в каталогах, созданных пользователем

Я хотел бы прочитать список всех каталогов, созданных пользователем или приложением в каталоге iCloud "Мобильные документы" (тот, который в Lion находится в каталоге ~/Library/Mobile Documents). Вот пример того, как может выглядеть этот каталог:

iCloud's Mobile Documents

Я попробовал следующий код, но запущенный запрос не содержит объектов, представляющих мои папки (с использованием NSPredicate predicateWithFormat:@"%K.pathExtension = ''", NSMetadataItemFSNameKey). Если я запущу запрос для txt-файлов (используя @"%K ENDSWITH '.txt'", NSMetadataItemFSNameKey), я получу 5 объектов, возвращенных для txt-файлов соответственно. Таким образом, поиск 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);
    }

}

6
задан n.evermind 24 October 2011 в 14:22
поделиться