[英]iPhone: Duplication of key issues with NSMutableDictionary
我正在从服务器获取XML格式的数据,并在方案中对其进行解析。 我在使用NSMutableDictionary将数据放入键值对时遇到问题。 因为,NSMutableDictionary密钥是唯一的。 因此,如果存在来自xml的相同键,它将使用存在的先前值覆盖键。 例如:我的XML数据如下。
<?xml version='1.0' encoding='utf-8'?><order>
<number>123</number>
<detail>
<name>shoe</name>
<description>This is from nike</description>
<price>10.00</price>
<name>discount</name>
<description>This is from Arrow</description>
<price>-1.00</price>
<name>bag</name>
<description>This is a leather one</description>
<price>10.00</price>
</detail>
</order>
[appDelegate.finalOrderDict setObject:trimmString forKey:elementName];
我试图使用NSMutableDictionary将数据放入键值对中,因为我将在另一个视图中显示输出,如下所示。
Summary:
Shoe $ 10.00
Discount $ -1.00
Bag & 10.00
Discount $ -2.00
但是,由于密钥重复相同,因此它将覆盖现有密钥中的数据。
如果数据中存在相同的密钥,有人可以帮助我解决密钥的重复问题,我们尝试将其放入NSDictionary。
谢谢!
NSDictionary的行为符合预期- -setObject:forKey:
,如果旧键和新键对-isEqual:
回答为“是”,则现有键值对将被覆盖。 听起来您需要修改数据结构。
一个想法是让appDelegate.finalOrderDict
成为NSDictionary对象的NSArray。 然后,每个NSDictionary将具有“名称”和“价格”键值对。
您还可以将每个值提升为数组(如果已经存在):
id existingValue = [appDelegate.finalOrderDict objectForKey:forKey:elementName];
if ([existingValue isKindOfClass:[NSMutableArray class]]) {
[existingValue addObject:trimmString];
} else if (existingValue) {
[appDelegate.finalOrderDict setObject:[NSMutableArray arrayWithObjects:existingValue, trimmedString, nil] forKey:elementName];
} else {
[appDelegate.finalOrderDict setObject:trimmedString forKey:elementName];
}
但是,这种方法比较冒险,因为您必须对从finalOrderDict获得的所有对象进行类型检查,以查看它们是字符串还是数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.