2013-08-05 1 views
6

NSPredicatepredicateWithFormat:argumentArray :을 (를) 사용하는 데 문제가 있습니다. 이 예에서 serverIDList은 문자열 배열입니다. 결과는 문자열 인 "flid"라는 속성이있는 NSManagedObjects의 배열입니다.NSPredicate predicateWithFormat : argumentArray : 첫 번째 인수 만 평가

NSMutableString *predicateString = [[NSMutableString alloc] init]; 

[predicateString appendString:@"(flid IN %@)"]; 

[results filterUsingPredicate:[NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList]]; 

문제 [NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList] 배열 serverIDList의 첫 번째 값인에 "IN flid '2155'"평가이다. 나는 전체 배열을 평가할 술어를 얻지 못하는 것 같습니다. 여기에 누락 된 것이 있습니까?

감사합니다.

답변

26
[NSPredicate predicateWithFormat:@"(flid IN %@)" argumentArray:serverIDList] 

id1이, ..., idNserverIDList 배열의 요소

[NSPredicate predicateWithFormat:@"(flid IN %@)", id1, id2, ..., idN] 

동일하다. 첫 번째 요소 만 평가되는 이유를 설명해야합니다. 당신은 아마 원하는 것은

[NSPredicate predicateWithFormat:@"(flid IN %@)", serverIDList] 

비고입니다 : 내가 먼저 문자열로 조건을 만들 수 없습니다를 recomment 것이다. 오류의 인용 또는 이스케이프 가능성은 매우 높습니다. 고정 형식 문자열이있는 predicateWithFormat 만 사용하십시오. 런타임시 술어를 동적으로 결합해야하는 경우 NSCompoundPredicate을 사용하십시오.

+0

설명해 주셔서 감사합니다. –