У меня есть несколько проблем, связанных с NSPredicates, вот они;
1.) Мой код выглядит следующим образом:
NSArray *arr= [self.humanArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY name IN %@ ", nameArray]];
Я получаю следующее исключение;
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.'
*** Call stack at first throw:
Когда я пишу предикат как @"name IN %@ ", nameArray
.Это работает, но я думаю, что в этом может быть какой-то недостаток.
примечание: humanArray
, содержит объекты HUMAN
, а объект human
содержит следующие атрибуты.name
, age
, gender
, country
, region
.
2.) Я думаю, что я здесь делаю, неправильно.Пользователю предоставляется возможность фильтрации self.humanArray
.Пользователь может фильтровать, используя один, несколько или ни один из следующих критериев:
name, age, gender, country or region.
Мой код выглядит следующим образом;
NSArray *fRegionArray= [self.humanArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"regionIN %@ ", regionArray]];
NSArray *fCountryArray= [fRegionArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"country IN %@ ", countryArray]];
NSArray *fNameArray= [fCountryArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name IN %@ ", nameArray]];
Этот код работает, если пользователь выбирает все фильтрыатрибуты (region
, country
и name
).Если вы посмотрите на приведенный выше код, то заметите, что выходной массив 1-го предиката используется для фильтрации во 2-м предикате.Вот почему он так себя ведет.
Мне нужно изменить приведенный выше код, чтобы пользователь мог ввести любой из атрибутов для целей фильтрации.region
или country
или name
.