Первый вопрос: В основном я пытаюсь добавить объекты NSMutableDictionary в NSMutableArray с помощью метода addItem.Добавить объекты в 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];
Спасибо всем, кто помог.
Я предлагаю регистрировать значение счета элементов в начале этого метода, чтобы фактически подтвердить, что предыдущий объект все еще существует. Также может быть полезно посмотреть, как и где элементы объявлены и инициализированы. – Bamsworld