Эта задача проста, если вы выбираете подходящий формат для ваших данных. Наиболее естественным представлением 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"];
...
}
Когда элемент кликнет, откройте ваш 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 из 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, проверьте, содержит ли корзина текущий товар:
if ([self.basket objectForKey:[item objectForKey:@"ItemName"])
и, если это так, показать, что текущий товар уже добавлен в корзину, и предоставить возможность удалить его или изменить сумму.