繁体   English   中英

iPhone:NSMutableDictionary的关键问题重复

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM