Я не вижу никакой проблемы с этой строкой кода. Почему он не может разобрать?NSPredicate не может разобрать строку формата
[NSPredicate predicateWithFormat:@"(username CONTAINS[cd] %[email protected]) || "
"(userId CONTAINS[cd] %[email protected]) || "
"(firstname CONTAINS[cd] %[email protected]) || "
"(lastname CONTAINS[cd] %[email protected])", searchString]"
Журнал также не помогает.
Нагрузочный приложение из-за неперехваченного исключением 'NSInvalidArgumentException', причина: «Невозможно разобрать строку формата «(имя пользователя СОДЕРЖИТ [CD]% 1 $ @) || (идентификатор пользователя СОДЕРЖИТ [кд]% 1 $ @) || (Firstname СОДЕРЖИТ [кд]% 1 $ @) || (фамилия СОДЕРЖИТ [CD]% 1 $ @) "»
Редактировать 1:
Хорошо, кажется, как predicateWithFormat не понимает «% 1 $ @». Я переключаю его на
[... predicateWithFormat:[NSString stringWithFormat:...]] // (same format as above)
Он прошел линию. Но, следующая задача:
self.filteredUserList = [self.userList filteredArrayUsingPredicate:predicate];
Нагрузочного приложение из-за неперехваченное исключение «NSUnknownKeyException», причины: «[valueForUndefinedKey]: сущность Пользователь не ключевое значения кодирования-совместимый для ключа" а».»
«a» - это ключевое слово, которое я ввел в searchTextBox. ВТ?
я распечатал предикат в консоли отладки, не выглядит ничего плохого:
username CONTAINS[cd] a OR userId CONTAINS[cd] a OR firstname CONTAINS[cd] a OR lastname CONTAINS[cd] a
Edit 2:
Хорошо, проблема решена с этим супер уродливый код:
[NSPredicate predicateWithFormat:@"(username CONTAINS[cd] %@) || "
"(userId CONTAINS[cd] %@) || "
"(firstname CONTAINS[cd] %@) || "
"(lastname CONTAINS[cd] %@)", searchString, searchString, searchString, searchString];
Что делать, если я хочу расширить поле поиска в будущем? Мне нужно добавить больше параметров? more ", searchString, searchString, searchString"?
решаемые
Благодаря Ewan и Bannings, что дает 2 варианта на мой вопрос. Я протестировал их обоих, и они работали в качестве очарования. Может ли кто-то объяснить разные между этими двумя, и в каком случае я должен использовать какой вариант?
** NOTE ** ответ
Bannings' все в порядке, пока моя строка поиска не содержит апостроф '
, то сбой приложения. Поэтому я считаю, что лучше использовать Эвана.
Работает отлично! Это то, что мне нужно. Спасибо – Eddie