2010-08-19 2 views
1

여러 NSDictionaries가 포함 된 NSArray가 있습니다.중첩 된 NSArray/NSDictionary 문제

ID 문자열이 포함 된 NSString이 있습니다.

내가하려는 것은 NSString과 일치하는 개체를 찾을 때까지 NSDictionaries를 반복하는 것입니다. 그런 다음 전체 NSDictionary를 반환하려고합니다.

저는 iPhone 개발에 익숙하지 않으므로 분명히 뭔가 빠져 있습니다. 미리 감사드립니다. :)

편집, 여기에 저장된 가져옵니다 .plist 파일입니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <dict> 
     <key>date</key> 
     <string>2011/05/20</string> 
     <key>id</key> 
     <string>1282007740</string> 
     <key>name</key> 
     <string>Test item name</string> 
     <key>niceDate</key> 
     <string>May 20, 2011</string> 
    </dict> 
    <dict> 
     <key>date</key> 
     <string>2010/08/15</string> 
     <key>id</key> 
     <string>1282075925</string> 
     <key>name</key> 
     <string>Test. Nothing to see here.</string> 
     <key>niceDate</key> 
     <string>Aug 15, 2010</string> 
    </dict> 
</array> 
</plist> 

이의 내있는 NSString가 "1282075925"입니다 가정 해 봅시다. 일치하는 id 키를 가진 사전을 얻고 싶습니다.

+0

자세한 정보. 어떤 코드일까요? 사전 키는 무엇입니까? – jtbandes

+0

죄송합니다. plist 형식의 배열 표현으로 업데이트했습니다. –

+0

찾고있는 NSString이 무엇인지 예를 들려 줄 수 있습니까? 특히 '키'또는 '가치'를 찾고 계십니까? 즉 'name'또는 'Test item name'을 검색하고 있습니까? – Akusete

답변

3

"ID를"- NSDictionary 당신이하는 말에, dict 것 중 하나 점 검색 중이거나 일치하는 사전이없는 경우 nil이됩니다.

// (These are assumed to exist) 
NSArray *dictionaries; 
NSString *idToFind; 



NSDictionary *dict = nil; 
for (NSDictionary *aDict in dictionaries) { 
    if ([[aDict objectForKey:@"id"] isEqualToString:idToFind]) { 
     dict = aDict; 
     break; 
    } 
} 
+0

+1 스타일. 그러나 'id'필드의 값이 배열 또는 NSString 이외의 다른 형식 인 경우 '지원되지 않는 선택기'오류가 발생합니다. – Akusete

+1

좋은 지적입니다. plist가 생성되고 유지 관리되는 경우 이러한 종류의 문제에 대한 방어 코딩 작업에 참여할 가치가 있는지 여부는 논란의 여지가 있습니다. 정적 plist 데이터에 관해서는, 내가 보통 (또는 포인트, 읽을 수있는) 코드를 선호하기 때문에 나는 보통 그런 종류의 방어 수표를 넣지 않는다. 다른 코더와 협력 중이거나 plist가 다른 사람에 의해 편집 될 수 있다면, 나는 보통 할 것입니다. 그것은 판결 전화입니다. –

+0

NSString이 아닌 다른 형식이 될지 걱정하지 않습니다. 특히 간단하고 우아하기 때문에 당신의 해결책을 시도했습니다. 불행히도, 어떤 이유로 든 사전과 문자열이 일치하지 않습니다. 디버깅을 위해 일부 NSLog를 넣었지만, 어디서 잘못 될지 알 수는 없습니다. 내가 연결해야하는 값이 일치해야하고 plist를 만든 루틴은 NSString을 삽입하므로 형식 문제가 아닙니다. ... –

2

것은 당신의 키, @ "12345"을 검색하는 경우 @이 코드는 당신이 원하는 일을해야

for (NSDictionary* dictionary in array1) { 
    id value = [dictionary valueForKey:@"id"]; 
    if ([value isKindOfClass:[NSString class]]) { 
     NSString* string = (NSString*) value; 
     if ([string isEqualToString:@"12345"]) { 
      return dictionary; 
     } 
    } 
} 
return nil;