【发布时间】:2015-07-18 02:24:18
【问题描述】:
第一个问题: 基本上我试图通过使用方法 addItem 将 NSMutableDictionary 对象添加到 NSMutableArray。
-(void)addItem:(id)ObID name:(id)ObName description:(id)ObDesc menuName:(id)ObmName menuID:(id)ObmID mid:(id)Obmid pod:(id)pod type:(id)obType price:(id)price
{
NSMutableDictionary *itemToAdd = [[NSMutableDictionary alloc]init];
[itemToAdd setValue:ObID forKey:@"id"];
[itemToAdd setValue:ObName forKey:@"name"];
[itemToAdd setValue:ObDesc forKey:@"description"];
[itemToAdd setValue:ObmName forKey:@"mname"];
[itemToAdd setValue:ObmID forKey:@"menu_id"];
[itemToAdd setValue:Obmid forKey:@"mid"];
[itemToAdd setValue:pod forKey:@"POD"];
[itemToAdd setValue:obType forKey:@"Type"];
[itemToAdd setValue:price forKey:@"Price"];
[itemToAdd setValue:@"1" forKey:@"Amount"];
[items addObject:itemToAdd];
}
但是,当稍后再次调用此方法时,添加到的下一个对象将覆盖具有相同键的对象的值。我知道这是因为数组只保留了一个内存地址,因此当添加相同的对象只是具有不同类型的“obType”时,所有这些值都会改变。
如何在不相互引用的情况下将对象添加到 NSMutableArray?
例子:
添加一个对象后的输出:
{
Amount = 1;
POD = BOTH;
Type = {
0 = Vegetarian;
1 = Aussie;
};
description = "Online Special Only - Two Large Pizza's $25 (No half halves or extra toppings!) Enjoy!";
id = 7596;
"menu_id" = 112;
mid = 112;
mname = "Deal";
name = "Hungry? Two Large Pizzas!";
}
)
添加另一个具有相同 ID 但类型不同的对象后的输出:
{
Amount = 1;
POD = BOTH;
Type = {
0 = "Plain";
1 = Aussie;
};
description = "Online Special Only - Two Large Pizza's $25 (No half halves or extra toppings!) Enjoy!";
id = 7596;
"menu_id" = 112;
mid = 112;
mname = "Deal";
name = "Two Large Pizzas!";
},
{
Amount = 1;
POD = BOTH;
Type = {
0 = "Plain";
1 = Aussie;
};
description = "Online Special Only - Two Large Pizza's $25 (No half halves or extra toppings!) Enjoy!";
id = 7555;
"menu_id" = 112;
mid = 112;
mname = "Deal";
name = Two Large Pizzas!";
}
)
可以看出,两种对象类型都发生了变化。
好的,所以我解决了这个问题,但不是 100% 确定原因。 我将类型对象作为 NSMutableDictionary 传入,如果一个项目有 2 个变体,则字典中的一个对象的键为 0,而当像这样传入时,另一个对象的键为 1,它们会相互覆盖。 仅将值作为 NSArray 传递可以解决此问题。
通过传入完成:
NSArray * values = [selectedItemOptions allValues];
感谢所有帮助过的人。
【问题讨论】:
-
我建议在此方法开始时记录项目的计数值,以实际确认前一个对象仍然存在。此外,查看项目的声明和初始化方式和位置可能很有用。
标签: ios objective-c nsmutablearray nsdictionary