Работая над фильтрацией моего NSMutableDictionary на основе пользовательского ввода, я создал следующий код:
NSString *predicateString = [NSString stringWithFormat:@"SELF beginsWith[cd] %@", searchString];
NSPredicate *pred = [NSPredicate predicateWithFormat:predicateString];
NSArray *filteredKeys = [[myMutableDictionary allKeys] filteredArrayUsingPredicate:pred];
"searchString" передается в метод с таким определением:
(NSString*) searchString
Это, однако, привело к следующему исключению:
... повышенный [valueForUndefinedKey:]: этот класс
не соответствует значению ключа для ключа ...
Исправление оказалось:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF beginsWith[cd] %@", searchString];
NSArray *filteredKeys = [[myMutableDictionary allKeys] filteredArrayUsingPredicate:pred];
Что я не понимаю, так это то, почему последний сработал, а первый бросил исключение. Я немного прочитал о кодировании значения ключа , но я не понимаю, как это применимо здесь. (т. е. только путем изменения определения NSP-предиката) Может ли кто-нибудь просветить меня?
Обновление:
В ответ на комментарий jtbandes я продолжил работу и создал проект TestApp для демонстрации этой проблемы. http://dl.dropbox.com/u/401317/TestApp1.tar.gz