2011-03-11 2 views
1

나는 열이 NSArrayController의 하위 클래스에 바인딩 된 NSTableView를가집니다. 'value'열의 각 항목은 파일 경로 목록 (모델에서), 특히 응용 프로그램의 PATH 및 PYTHONPATH입니다.코코아의 맞춤 NSPredicate

필자가 원하는 것은이 값을 편집 할 때 편집을 제어하여 목록의 각 경로가 올바른 경로인지 확인하는 것입니다. 바인딩을 사용하고 있기 때문에 어떤 종류의 NSPredicate를 작성해야한다고 생각하지만 테스트가 약간 복잡하기 때문에 필터를 정의하는 함수를 사용하고 싶습니다. NSPredicate로 커스텀 함수를 어떻게 사용합니까?

아니면 다른 접근 방법을 고려해야합니까?

감사합니다.

업데이트 :이 방법 validate 추가는 NSString에 대한 범주를 사용하여, 내가 원하는 것을 평가하는 식으로 filepaths를 포함하는 문자열을 만드는 방법을 알아 낸

. 하지만 여전히 필터 술어로 가져 오는 방법을 모르겠습니다.

NSString *s = @"~:~/Desktop"; 
NSExpression *f = [NSExpression expressionForConstantValue:s]; 
NSExpression *e = [NSExpression expressionForFunction:f 
             selectorName:@"validate" 
              arguments:nil]; 

나는

답변

1

..이 기본적으로 항상 표현에 평가 무엇을 뱉어 필터 조건이 될 것입니다 매우 간단 같아요

NSString *s = @"~:~/Desktop"; 
NSPredicate *p = [NSPredicate predicateWithFormat:@"FUNCTION(%@, 'validate') == YES", s]; 

을 또는 당신은 문자열의 배열이있는 경우 그 유효성 검사를 통과 한 모든 것을 찾기 위해 필터링하려고합니다 :

여기서 주목해야 할 것은 -validate 방법의 결과는 이어야합니다.id이되어야합니다. 따라서 true/false 값을 반환하면 BOOL 상자가 NSNumber에 반환되어야합니다. (술어 형식 문자열에있는 YES은 자동으로 NSNumber으로 변환됩니다.

일단 술어가 생기면 배열 컨트롤러 나 다른 것으로 설정할 수 있습니다.