2013-05-03 5 views
16

Я пытаюсь написать NSPredicate для извлечения строк с помощью значения my_column с помощью этой строки «193e00a75148b4006a451452c618ccec», и я получаю следующее краш.NSPredicate - Невозможно проанализировать строку формата

Нагрузочного приложение из-за неперехваченное исключением 'NSInvalidArgumentException', причину: 'Невозможно разобрать строку формата "my_column = 193e00a75148b4006a451452c618ccec"'

Моего предикат заявление

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]]; 

Пожалуйста, помогите.

Я узнал это, когда я пытался с ответом Мартин АиРа

fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%@==%@",attributeName,itemValue]; 

ATTRIBUTENAME проходит поставляется с «», так что я снял ATTRIBUTENAME и жёстко, то она отлично работает.

+0

Некоторый код пожалуйста – Anupdas

+0

делают использование LIKE вместо «=», если вы сравниваемых строк! –

+0

Нет необходимости в котировках при использовании заполнителя. – Anupdas

ответ

40

Заключите строку в одинарные кавычки:

[NSPredicate predicateWithFormat:@"my_column = '193e00a75148b4006a451452c618ccec'"] 

или лучше, использование аргумента:

[NSPredicate predicateWithFormat:@"my_column = %@", @"193e00a75148b4006a451452c618ccec"] 

Второй метод позволяет избежать проблем, если строка поиска содержит специальные символы , такие как ' или ".

Примечание: Никогда не используйте stringWithFormat при построении предикатов. stringWithFormat и predicateWithFormat обрабатывают формат %K и %@ по-разному, поэтому объединение этих двух методов очень подвержено ошибкам (и не нужно).

+0

Я пробовал и то, и другое, никакого эффекта. – satheeshwaran

+2

@satheeshwaran: Никогда не используйте 'stringWithFormat' при построении предикатов !!! Пожалуйста, попробуйте, как я написал в ответ. –

+0

Hey @Martin RI также сделал это, не использовал :-(. – satheeshwaran

4

Я думаю, вы пропустили '' при проверке равенства,

теперь попробуйте,

[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]; 
+0

1) Обратите внимание, что «LIKE» выполняет сопоставление подстановочных знаков, где «*» и «?» имеют особое значение! - 2) Для имени фиксированного атрибута нет необходимости использовать '% K'. –

+0

@MartinR спасибо за эту информацию :). Я просто хотел показать, что для атрибута placeholder должен быть с% K. Если при использовании LIKE возникла проблема, как мы можем делать нечувствительный к регистру и диакритический поиск. – Anupdas

+1

Вы можете сделать 'my_column == [cd]% @" '! –

Смежные вопросы