NSPredicate. Невозможно проанализировать строку формата.
Я пытаюсь написать NSPredicate
для извлечения строк с помощью значения my_column с помощью этой строки "193e00a75148b4006a451452c618ccec
", и я получаю следующий сбой.
Завершение приложения из-за неперехваченного исключения "NSInvalidArgumentException", причина: "Невозможно проанализировать формат строка" my_column = 193e00a75148b4006a451452c618ccec" '
My predicate statement
fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@==\"%@\"",attributeName,itemValue]];
также попробовал это
fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ == %@",attributeName,itemValue]];
это
fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ = %@",attributeName,itemValue]];
и этот
fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@=\"%@\"",attributeName,itemValue]];
Пожалуйста, помогите.
Я узнал об этом, когда пытался с ответом Martin R
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%@==%@",attributeName,itemValue];
attributeName я pass поставляется с '', поэтому я снял атрибутName и закодировал его, тогда он отлично работает.
Ответы
Ответ 1
Вставьте строку в одинарные кавычки:
[NSPredicate predicateWithFormat:@"my_column = '193e00a75148b4006a451452c618ccec'"]
или лучше, используйте замену аргументов:
[NSPredicate predicateWithFormat:@"my_column = %@", @"193e00a75148b4006a451452c618ccec"]
Второй метод позволяет избежать проблем, если строка поиска содержит специальные символы
таких как '
или "
.
Примечание. Никогда не используйте stringWithFormat
при построении предикатов. stringWithFormat
и
predicateWithFormat
обрабатывать формат %K
и %@
по-разному, поэтому объединение этих
два метода очень подвержены ошибкам (и не нужны).
Ответ 2
Я думаю, что вы пропустили '' при проверке равенства,
теперь попробуйте,
[NSPredicate predicateWithFormat:@"my_column='193e00a75148b4006a451452c618ccec'"];
Ответ 3
Попробуйте
//Case Insensitive
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%K = [cd] %@",attributeName,itemValue];
//Case sensitive
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%K = %@",attributeName,itemValue];