2011-03-23 50 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]; 
}