2016-05-31 2 views
1

У меня есть один основной массив с именем originalListArray с несколькими объектами. Вот пример объекта. Example.jsonФильтр NSArray с NSDictionary (вложенным уровнем объекта) с использованием NSPredicate ANY и IN?

Я хочу, чтобы найти, что количество объектов из originalListArray, которые amenity_id совпавших с моими данными фильтра. Я сделал это, создаю один предикат usign ANY не self becuase NSArray с NSDictionary и в этом словаре объект может иметь данные NSArray.

Это прекрасно работает.

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id =='1')"]; 

Это не работает.

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id in ('1','2','3')"]; 

Так Одно значение может быть фильтр легко, но usign IN oparation его аварии и ошибки, как это.

Согласующего приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: 'Невозможно разобрать строку формата "ANY amenities.amenity_id в ('1', '2', '3')"'

Спасибо, если кто-нибудь может помочь мне в этом.

+2

'[NSPredicate predicateWithFormat: @ "ANY amenities.amenity_id IN% @", @ [@ "1" @, "2", @ "3"]] '? – Larme

+1

@ Larme Да, его работа. Прежде всего, благодарю вас за ваш быстрый ответ, но я не понял, почему мне нужно передать массив. Поскольку запрос IN мы обычно передаем как значение, разделенное запятыми, в виде строки. –

+0

Если вы запишете рабочий предикат, вы увидите, что на самом деле это '@" ЛЮБОЕ удобства: имя_на_и_и_ИНА {'1', '2', '3'} "' (используя браслеты вместо круглых скобок). Нет, передача его с помощью заполнителя (% @) дает более легкие изменения при необходимости. – Larme

ответ

2

Я думаю, что лучше передать массив в качестве параметра с помощью %@ placeholder.

[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id IN %@", @[@"1",@"2",@"3"]] 

Таким образом, вы можете вручную создать свой массив, и если вам нужно его изменить, это проще.

Если вы все еще хотите, чтобы сделать это вручную, изменяя "формат строки":

[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id IN {'1', '2', '3'}"] 
Смежные вопросы