NSPredicate와 관련된 몇 가지 문제점이 있습니다.NSPredicate 작성
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.
내 코드는 다음과 같습니다. 사용자가 모든 필터 특성 (region
, country
및 name
)를 선택하면
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]];
이 코드는 작동합니다. 위의 코드를 보면 1 차 술어의 출력 배열이 2 차 술어에서 필터링에 사용됨을 알 수 있습니다. 그래서 이것이 그것이 이런 식으로 행동하는 이유입니다.
사용자가 필터링 목적으로 임의의 속성을 입력 할 수 있도록 위 코드를 수정해야합니다. region
또는 country
또는 name
입니다.
ques 1.) 위의 술어에서 IN과 함께 ANY를 사용할 수 없습니까? ques 2.) 어떻게 할 수 있습니까? – Illep
1) 그냥 아무 것도 건너 뛰십시오. 그런 식으로 사용하지 않아야합니다. 2) 변경 가능한 배열을 만들고 각 조건 자 결과에서 개체를 추가 한 다음 removeDuplicates –