술어 사용법을 이해할 수 없으며 속성 "type"에 의해 배열에서 개체를 필터링하는 데 매우 긴 코드를 가지고 갑자기 "filteredArrayUsingPredicate"메서드를 보았습니다. 내 인생을 더 좋게 만들 수있다. 나는 술어를 쓰려고 노력하지만 항상 오류가 발생한다. 누군가가 저에게 그것을 올바르게 쓰는 방법을 보여줄 수 있습니까?filtersArrayUsingPredicate 메서드를 사용하여 속성별로 배열에서 개체 필터링
I는 객체 (이벤트)을 가진 배열을 : 있는 NSArray * eventsArray
나는 방법 - (void) filterData: (NSString *)filteredWord
있다. filtersArrayUsingPredicate를 사용하여 속성 (유형)이 동일한 filterWord가있는 객체 (이벤트)로 새 배열을 가져 오려고합니다. 이벤트는 핵심 데이터 관리 하위 클래스입니다.
조건 자로도이 작업을 수행 할 수 있습니까? 내 시도
하나 :
NSString *propertyName = @"type";
NSArray *eventsArray = [[[[self currentPerson] events] objectEnumerator]allObjects];
NSPredicate *predicte = [NSPredicate predicateWithFormat:@"%k like '%@'",propertyName,filteredWord];
[eventsArray filteredArrayUsingPredicate:predicte];
당신의 의견을 좀 주셔서 감사합니다. 나는 예측에 대해 조금은 이해하지만, 필자가 필터링 된 유형을 가진 객체가 더 많을 경우 filtersArray에 0 객체가 있습니다. 이벤트는 NSSET이므로'[[array objectEnumerator] allObjects]'를 사용합니다. – Dennis
그런 경우'[set allObjects]'를 사용할 수 있습니다. 열거자를 필요가 없습니다. 또한 UIEvent의 type 속성은 문자열이 아닙니다. 열거 형 (정수)입니다. 내 업데이트 답변을 참조하십시오. – DrummerB
실제로 "% FF"대신 "% K"을 사용할 수도 있습니다. "% K"는 술어의 키 경로에 대한 var arg 대체입니다. - 그리고 나는 (Dennis의 이전 질문에서)'Event'가 핵심 데이터 관리 객체 서브 클래스이고'UIEvent'와 관련이 없다는 것을 알게되었습니다. 따라서 "% K LIKE % @"가 작동해야합니다. –