Эта задача проста, если вы выбираете подходящий формат для своих данных. Наиболее естественным представлением XML в ObjC является дерево NSDictionaries/NSArrays. В самом простом случае у вас есть NSArray элементов (те, которые вы показываете в виде таблицы), каждый из них представляет собой NSDictionary с такими ключами, как «ItemName», «ItemPrice» и т. Д. В таблице можно легко увидеть элементы в массиве с индексом ячейки:
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSDictionary * item = [allItems objectAtIndex:indexPath.row];
NSString * cellTitle = [item objectForKey:@"ItemName"];
...
}
Когда элемент cliked открыть DetailViewController и передать ссылку на выбранный пункт:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath{
MyDetailViewController * myDetailViewController = [[MyDetailViewController alloc] init];
//MyDetailViewController should have a property of NSDictionary type, let it be "item"
myDetailViewController.item = [allItems objectAtIndex:indexPath.row];
//pass also ref to basket
myDetailViewController.basket = basket;
[self.myDetailViewController pushViewController:dvController animated:YES];
[myDetailViewController release];
}
показать все свойства элемента в деталях контроллера.
Корзина является NSMutableDictionary of NSMutableDictionaries. Каждый элемент элемента backet - это свойство элемента, уникальное среди всех элементов, например «ItemName». Каждое значение элемента backet должно содержать ссылку на элемент в исходном массиве. В MyDetailViewController Вы можете добавить товар в корзину, как:
-(void)addToBasket{
NSDictionary * itemToAdd = [NSDictionary dictionaryWithObjectsAndKeys:
item, @"item", // this is reference to item from original array
[NSNumber numberWithInt:amount], @"amount", // or some other properties
nil];
[self.basket setObject:itemToAdd forKey:[item objectForKey:@"ItemName"]];
}
При открытой регистрации DetailViewController, если корзина уже содержит curent предмет:
if ([self.basket objectForKey:[item objectForKey:@"ItemName"])
и если да, то показать, что curent элемент уже добавлен в корзину, и обеспечить возможность удалить или изменить сумму.