2010-11-10 4 views
0

В Objective-C я настраиваю NSMetaDataQuery и устанавливаю setSearchScope: для запроса на поиск определенных файлов документов. Поиск работает, но не восстанавливает дерево каталогов, только поиск в папке «Документы».
Я пробовал подстановочные знаки, но без радости.NSMetaDataQuery, установить пути setSearchScope для рекурсивного?

Вот в основном то, что я пытался, и он работает, за исключением не искать ниже каталога документов:

query = [[NSMetadataQuery alloc] init]; 
[query setSearchScopes:[NSArray arrayWithObjects:@"/Users/username/Documents/",nil]]; 
[query setPredicate:[NSPredicate predicateWithFormat:@"(kMDItemFSContentChangeDate >= '$time.this_week')"]]; 
[query startQuery]; 

ответ

0

Я думаю, ваша проблема может быть Слэш на /Users/username/Documents/. При работе с путями в Objective-C структура никогда не ставит конечную косую черту. Снимает ли это помощь?

+0

Хорошая мысль. Я попытался снять его и получил те же результаты. Я думал, что может быть что-то, что я могу сделать с NSString, определяющим путь, но еще не решил его. Существует много методов управления путями в NSString, которые я обнаружил при работе с этим. – Wilersh

+0

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/ManipulatingPaths.html%23//apple_ref/doc/uid/20000152-BBCBIGHH – Wilersh

1

Я думаю, что проблема связана с вашей строкой формата NSPredicate. (Я имел в виду написать это!) По существу, ваш $time.this_week отлично работал бы в запросе Spotlight, но не как строка NSPredicate. Вы должны реально создать объект NSDate и передать его в строку запроса, как

[query setPredicate:[NSPredicate predicateWithFormat:@"(kMDItemFSContentChangeDate <= %@)", [NSDate date]]]; 

Вот соответствующие ссылки для вашей справки:

Comparison of NSPredicate and Spotlight Query Strings
Spotlight Query Expression Syntax
Predicate Format String Syntax