2011-03-09 3 views
2

나는 dicts 배열이있는 plist 있습니다. Dict에는 이름이 UID 인 KEY가 있습니다. 나는 UID = "1234"인 plist를 쿼리하려고합니다. 어떻게 검색합니까?사전의 배열 인 쿼리 plist

샘플

<array> 
    <dict> 
     <key>UID</key> 
     <string>1234</string> 
     <key>name</key> 
     <string>bob</string> 
    </dict> 
    .... 
</array> 
+0

의 중복 가능성 http://stackoverflow.com/questions/2680403/array-from-dictionaries에서 배열) –

+0

@DavidGelhar : 아마도 그렇지 않습니다. @ magic-c0d3r은 배열을 필터링하고 각 객체에서 값을 추출하지 않으려 고합니다. –

답변

5

사전 배열로 PLIST에서 읽은 다음에 NSArrayfilteredArrayUsingPredicate: 방법을 사용

NSString *path = [[NSBundle mainBundle] pathForResource:@"MyInfo" ofType:@"plist"]; 
NSArray *plistData = [NSArray arrayWithContentsOfFile:path]; 
NSPredicate *filter = [NSPredicate predicateWithFormat:@"UID = %d", 1234]; 
NSArray *filtered = [plistData filteredArrayUsingPredicate:filter]; 
NSLog(@"found matches: %@", filtered); 
[사전으로 배열 어레이 (
1

사전 배열로 PLIST에 읽어내어 objectForKey을 사용있는 NSDictionary 방법.

NSString *path = [[NSBundle mainBundle] pathForResource:@"MyInfo" ofType:@"plist"]; 
NSArray *plistData = [[NSArray arrayWithContentsOfFile:path] retain]; 
for (NSDictionary *dict in plistData) { 
    if ([[dict objectForKey:@"UID"] isEqualToString:@"1234"]) { 
     NSLog(@"Found it!"); 
    } 
} 
+0

가능한 경우 for 루프를 피하려고합니다. 그게 내가 지금하고있는 일이다. 나는 대안이 있는지 궁금해하고 있었다. – Arcadian

+0

위의 Dave DeLong의 답변을 확인하십시오! 그의 솔루션은 잘 작동합니다. –

관련 문제