2013-03-04 3 views
0

프로젝트 전체에서 JSON 전체를 다운로드 한 다음 예쁜 UITableView를 만드는 중입니다.NSMutableArray sub NSDictionaries의 NSPredicate 필터링

JSON을 멋진 NSMutableArray로 구문 분석 한 다음 UITableView에 공급합니다. 모든 것이 효과가 있고 예쁜 것처럼 보입니다.

내가 가지고있는 문제는 내 NSMutableArray에 tableview를 필터링하는 데 사용할 사전 개체가 있다는 것입니다. 있는 NSMutableArray에서 사전을

{ 
id = 123456; 
    issues =  (
       { 
      id = 4; 
      name = "Ape"; 
     }, 
       { 
      id = 25; 
      name = "Chimp"; 
     }, 
       { 
      id = 28; 
      name = "Human"; 
     } 
    ); 
status = open; 
} 

는 내가 쓰고 싶은 것은 문제의 이름 열 중 하나에서 술어 필터입니다 :

이있는 NSMutableArray에있는 개체의 NSLog 내가 찾고 있어요된다 .

그러나 문제의 이름과 일치하는 조건부 변수에 맞는 형식을 찾을 수 없습니다. 나는 Predicate Programming 가이드를 읽고 다시 읽었으며 NSPredicate로 플래그 된 스택 오버플로 항목의 약 절반이 구문을 이해할 수 없다. 나는 많은 셀프 변형을 시도해 왔으며, 평범한 옛날에 붙어있다. 내가 문제를 정확하게 이해한다면

+0

내 대답이 도움이 되었습니까? 자세한 정보가 필요하면 알려주십시오. –

답변

2

, 다음과 같은 조건이 작동해야합니다

[NSPredicate predicateWithFormat:@"ANY issues.name == %@", @"Human"] 

이것은 "문제"중 적어도 하나가 "와 동일한"이름 "이 배열에서 모든 개체를 제공합니다 인간 ".

+0

이 솔루션을 사용해 보았지만 나에게 도움이되지 못했습니다. 내가 잘못했는지 확인해 주시겠습니까 [여기] (http://stackoverflow.com/questions/26480703/filtering-nsmutablearray-of-nsdictionary-with-nspredicate)? – NAZIK

0

Linq to ObjectiveC이라는 카테고리 방법 라이브러리를 작성 했으므로 좀 더 쉽게 할 수 있습니다. 내가 수집 할 수있는 것부터 배열 배열 인 issues이라는 속성을 가진 배열이 있습니다. 당신은 '인간'이라는 문제가 모든 항목을 찾으려면

, 다음을 수행 할 수 있습니다

NSArray* matches = [inputArray where:^BOOL(id item) { 
    return [[item issues] any:^BOOL(id issue) { 
     return [[issue name] equalTo:@"Human"]; 
    }]; 
}] 

이는 오브젝티브 -c whereany 방법에 Linq를 사용합니다.