NSPredicate predicateWithFormat для NSMetaDataQuery в iOS

Мне нужно добавить свою пользовательскую строку в NSPredicate.

Поэтому я написал следующие коды.

self.query = [[NSMetadataQuery alloc] init];
[self.query setSearchScopes: [NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];

NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K like '%@*'",NSMetadataItemFSNameKey,whereAreYou];

NSLog(@"%@",pred.description);

[self.query setPredicate:pred];    

Однако, когда я тестирую его, он возвращает только следующее значение.

kMDItemFSName LIKE "%@*"

заполнитель %@ добавлен неправильно. Он показывает только знак %@.

Как я могу это сделать?


person Fire Fist    schedule 30.08.2013    source источник
comment
какой тип whereAreYou?   -  person Jake Lin    schedule 30.08.2013
comment
да, это строка, и я уверен, что она имеет значение.   -  person Fire Fist    schedule 30.08.2013
comment
Я предлагаю вам сначала попробовать NSString stringWithFormat. А также посмотрите на developer.apple.com/ библиотека/mac/документация/какао/концептуальные/   -  person Jake Lin    schedule 30.08.2013
comment
Нет братан. Я уже пробовал, как вы сказали.   -  person Fire Fist    schedule 30.08.2013


Ответы (1)


Аргументы формата внутри кавычек не расширяются на predicateWithFormat, поэтому @"%K like '%@*'" не работает.

Это должно работать:

NSString *pattern = [NSString stringWithFormat:@"%@*", whereAreYou];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K LIKE %@", NSMetadataItemFSNameKey, pattern];
person Martin R    schedule 30.08.2013