2011-03-23 3 views
0

다음 질문이 있습니다. 사전에 4 개의 항목을 추가하고 싶습니다. 이것은 xml 기반입니다. 따라서 xml 파일에는 4 개의 항목이 있습니다. 나는 모든 항목을 추가하기 위해 XML 파서에 다음 코드를 사용NSDictionary에 항목 추가가 작동하지 않습니다.

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName{ 
    if ([elementName isEqualToString:@"Placemark"]) { 
     NSString *batsen = [placemarkData objectForKey:@"name"]; 
     [Placemarks setObject:placemarkData forKey:batsen]; 
     NSLog(@"adding story: %@", batsen); 
    } 
} 

문제는 그 장소 표시의 항목을 덮어처럼 보이는 것입니다. 로그 파일을 읽으면 마지막 항목 만 표시됩니다. 로그 (스토리 추가)가 4 개의 로그 메시지를 표시하기 때문에 이상합니다.

NSEnumerator *enumerator = [appDelegate.Placemarks keyEnumerator]; 
id key; 

while ((key = [enumerator nextObject])) { 

    /* code that uses the returned key */ 
    NSString *theElement = key; 
    NSLog(@"Element: %@", theElement); 
} 

누구나 제안 :

나는 위치 표시 사전을 읽기 위해 다음 코드를 사용할 수 있습니까? 사전에 Thnx

+1

어떻게하고 초기화하는하는 장소 표시 :이 코드는 새로운을 단순화하기 위해 건조 방법을 사용, 있는 NSDictionary 불변 확대했다. 나는 그것을 (readwrite, retain) 속성으로 기대할 것이다. 당신이 매번 초기화하는 것처럼 보입니다. btw 일반 규칙은 appDelegate.placemarks에서와 같이 ivars 및 속성의 첫 글자에 대해 소문자입니다. 장소 표시를 사용하면 답을 얻기 위해 클래스 선언 –

답변

2

이전 값이 출시되는 NSMutableDictionary의 기존 키 값을 설정 : 귀하의 경우에는

If aKey already exists in the dictionary, 
the dictionary’s previous value object for that key is sent a release message 
and anObject takes its place. 

c.f on NSMutableDictionary in Apple API

, 당신의 사전 키 (배열에 매핑한다 NSMutableArray) 그래서 4 xml 요소를 참조하는 키를 저장할 수 있습니다.

+0

Thnx가 표시됩니다. 그러나, 열쇠는 매번 다르며 존재하지 않습니다. 변수 "batsen"은 코드가 실행될 때마다 다릅니다 (로그에서 확인할 수 있음). – IosQuestions

0

사전에 항목을 추가하려면 NSMutableDictionary이 필요합니다.

// Make an immutable dictionary by combining 2 dictionaries (new entries are added, old entries are updated) 
+ (NSDictionary *)dictionaryFromDictionary:(NSDictionary *)original WithAddedEntries:(NSDictionary *)entriesToAdd 
{ 
    NSMutableDictionary *final = [NSMutableDictionary dictionaryWithDictionary:original]; 
    [final addEntriesFromDictionary:entriesToAdd]; 
    // Done 
    return [NSDictionary dictionaryWithDictionary:final]; 
} 
관련 문제