2010-04-15 4 views
3

식별자 속성이 술어에 지정된 식별자 배열과 일치하는 저장소에서 레코드를 얻기 위해 조건자를 사용하여 페치 요청을 설정하려고합니다.배열이있는 코어 데이터 가져 오기 요청

NSString *predicateString = [NSString stringWithFormat:@"identifier IN %@", employeeIDsArray]; 

employeeIDsArray에는 저장소의 ID와 일치하는 NSNumber 개체가 많이 포함되어 있습니다. 그러나 "형식 문자열을 구문 분석 할 수 없습니다"라는 오류 메시지가 나타납니다. 이 유형의 술어는 배열 필터링에 사용되는 경우 작동하지만 언급 된 것처럼 코어 데이터 가져 오기에는 실패합니다. 조건부를 어떻게 설정해야합니까?

답변

10

NSPredicateNSString과 같은 형식을 사용하지 않습니다. 사전 생성 된 predicateString을 사용하는 조건부 작성 결과가 유효한 조건부가되지 않도록하십시오.

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"identifier IN %@", employeeIDsArray]; 
[fetchRequest setPredicate:predicate]; 

술어 형식에 대한 자세한 정보에 대 한 the documentation를 참조하십시오

당신은 그것을 실제 조건을 확인해야합니다. 당신이 stringWithFormat:을 사용하여 해당 문자열을 만들 때

+0

고마워,하지만 물론 전화 : NSPredicate * predicate = [NSPredicate predicateWithFormat : predicateString]; – RunLoop

+0

이전에 귀하의 답변을 수락하지 않으신 것에 대해 사과드립니다. 나는 당신의 제안을 시도하고 그것을 작동합니다. – RunLoop

4

는, 그 방법은 당신이 %@했다 배열의 description (배열의 내용을 설명하는 문자열)를 삽입합니다.

그건 당신이 원하는 것이 아닙니다. 배열을 설명하는 문자열의 구성원 자격을 테스트하고 싶지는 않습니다. 의 멤버십을 테스트하려면 배열을 사용하십시오. 따라서 stringWithFormat: - 형식 문자열과 배열을 predicateWithFormat:으로 직접 전달하지 마십시오.

+0

고맙습니다. 첫 번째 포스터에 "답변 됨"을 주어야했지만, 당신 덕분에 나는 왜 그 이유를 이해했기 때문에 +1합니다. – RunLoop

+0

+1이 작동하지 않는 것을 알아 채기 위해 +1! 나는 그저 자신의 끈을 술어로 바꾸는 것을 잊었다 고 생각했다. –

관련 문제