2011-03-23 78 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

如何以及何時你初始化標。我希望它是一個(讀寫,保留)屬性。似乎你可能每次都要初始化。順便說一句,正常約定是小寫的ivars&屬性的第一個字母,如appDelegate.placemarks。使用地標意味着它的類聲明 – 2011-03-23 17:26:20

回答

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 2011-03-23 16:37:32

0

需要NSMutableDictionary才能將條目添加到字典中。該代碼段使用乾式方法可以簡化將新,擴建不變的NSDictionary

// 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]; 
}