Iphone 将条目添加到NSDictionary不会';行不通

Iphone 将条目添加到NSDictionary不会';行不通,iphone,objective-c,xml,ios,Iphone,Objective C,Xml,Ios,我有以下问题。我想在字典中添加4个条目,这是xml驱动的。因此,xml文件中有4个条目。我在xml解析器中使用以下代码添加所有条目: - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ if ([elementName isEqualT

我有以下问题。我想在字典中添加4个条目,这是xml驱动的。因此,xml文件中有4个条目。我在xml解析器中使用以下代码添加所有条目:

    - (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);
    }
}
问题是他似乎覆盖了Placemarks中的条目。如果我读出日志文件,我只看到最后一个条目。这很奇怪,因为日志(添加故事)确实显示了4条日志消息

我使用以下代码读取Placemark字典:

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

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

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

有人有什么建议吗?Thnx提前

当您为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.


在您的情况下,字典键应该映射到一个数组(NSMutableArray),这样您就可以存储一个引用4个xml元素的键。

NSMutableDictionary需要将条目添加到字典中。此代码段使用DRY方法简化创建新的、扩展的不可变的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];
}

谢谢你的回答!然而,关键是每一次都不同,并不存在。变量“batsen”在每次执行代码时都是不同的(我可以在日志中看到这一点)如何以及何时初始化Placemarks。我希望它是一个(读写,保留)属性。似乎你每次都在初始化。顺便说一句,IVAR和属性的第一个字母的正常约定为小写,如appDelegate.placemarks。使用Placemarks意味着它是一个类声明