2011-03-07 7 views
1

여기 액세스 값이 다른 키

내가 무엇을 가지고 ... stackoverflows 검색하여 일주일 만 행운에 대해 지출 :

1 PLIST :

<plist version="1.0"> 
    <array> 
    <dict> 
     <key>name</key> 
     <string>Name 1</string> 
     <key>abrev</key> 
     <string>(HGB, ΗbA)</string> 
     <key>picture</key> 
     <string>first.png</string> 
     <key>pictureHeight</key> 
     <integer>1686</integer> 
    </dict> 
    <dict> 
     <key>name</key> 
     <string>Name 2</string> 
     <key>abrev</key> 
     <string> </string> 
     <key>picture</key> 
     <string>second.png</string> 
     <key>pictureHeight</key> 
     <string>396</string> 
    </dict> 
    <dict> 
    ... 
    <dict> 
    </array> 
</plist> 

을 keys는 "picture"와 "pictureHeight"키 값을 반환하는 방법
키 "name"의 값을 알고 있습니다.

나는 이런 식으로 뭔가를 시도했지만 필사적으로 실패 ... 끝에

//creating an array that contains the plist 

dictArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
     pathForResource:@"table1" ofType:@"plist"]]; 

//creating an array that contains only the vlaues for key "name" 

NSMutableArray *temp = [dictArray valueForKey:@"name"]; 

//searchedData - an NSMutableArray containing the "name" values that 
//the user searched using the searchbar 

for (i=0; i<[searchedData count]; ++i) 
{ 
    if ([searchedData containsObject:[temp objectAtIndex:i]]) 
    { 
     [temp removeObjectAtIndex:i]; 
    } 
} 

나는 키 "이름"에 대한 값의 배열을하고 난 "사진"과 "pictureHeight"을 얻을 필요 내가 너무 멀리 광산으로받지 못했습니다 때문에 ... 나는 (자습서 아니면) 어떤 새로운 아이디어를 찾고 있어요 ... 다음 뷰 컨트롤러에이 정보를

답변

4

사용 A를

을 모두 밀어 NSPredicate 및 NSArray의 -filteredArrayUsingPredicate : 메소드를 사용하여 사전을 선택합니다. array 여기서 'name'키의 값은 찾고자하는 값과 일치합니다. 그런 다음 결과 사전 또는 사전에 일반적인 방법으로, 즉 objectForKey :를 사용하여 쿼리 할 수 ​​있습니다.

NSPredicate는 매우 강력하고 시간을 투자 할 가치가 있지만 사용법을 배우기는하지만 약간의 연구가 필요합니다. 당신이 구현하는 간단하지만 덜 우아한 무언가를 원하는 경우에, 단순히 배열을 통해 자신을 반복 :

NSMutableArray *matches = [NSMutableArray array]; 
for (NSDictionary *d in searchedData) { 
    if ([name isEqualToString: [d objectForKey:@"name"]]) { 
     [matches addObject:d]; 
    } 
} 

가 다시 말하지만, 당신이 '이름'당신이 찾고있는 이름과 일치하는 사전을 포함하는 배열 결국, 그리고 당신은 다른 속성들을 일반적인 방법으로 얻을 수 있습니다.

+0

케일럽! 완벽한 답변을 해주셔서 감사합니다. 나는 NSPredicate에 대한 정보를 찾았으며 정확히 내가 누락 된 부분입니다! 다른 모든 앱을 검토하여 코드를 최적화 할 수도 있습니다. 그것은 정말로 매우 강력한 것입니다! 행운을 빈다. 그리고이 방향으로 나를 가리켜 주신 것에 대해 다시 한 번 감사드립니다! 추신. :) 두 번째 결정에 대한 추가 감사! :) –

+0

위대한 - 내가 도울 수있어서 기뻐. ;-) – Caleb

+0

d [@ "name"] [d objectForKey : @ "name"]을 바꿀 수도 있습니다. –