NSMetaDataQuery, установить рекурсивные пути setSearchScope?

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

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

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

person Wilersh    schedule 10.11.2010    source источник


Ответы (2)


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

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

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

Сравнение строк запроса NSPredicate и Spotlight
Синтаксис выражения запроса Spotlight
Синтаксис строки формата предиката

person jxpx777    schedule 11.11.2010

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

person Dave DeLong    schedule 10.11.2010
comment
Хорошая мысль. Пробовал снимать, результат тот же. Я думал, что я могу что-то сделать с NSString, определяющим путь, но еще не решил его. Есть много методов управления путями в NSString, которые я обнаружил, работая над этим. - person Wilersh; 10.11.2010