This task is simple if you choose appropriate format for your data. Most natural XML represantation in ObjC is NSDictionaries/NSArrays tree. In simlest case you have NSArray of items (those you show in tableview) each of them is NSDictionary with keys like "ItemName", "ItemPrice" etc. It is easy to show in table accessing items in array with cell index:
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSDictionary * item = [allItems objectAtIndex:indexPath.row];
NSString * cellTitle = [item objectForKey:@"ItemName"];
...
}
When item cliked open your DetailViewController and pass reference to selected item:
-(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];
}
to show all item properties in detail controller.
Basket is NSMutableDictionary of NSMutableDictionaries. Each backet item key is some item property unique among all items for example "ItemName". Each backet item value should contain reference to item in original array. In MyDetailViewController you can add item to basket like:
-(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"]];
}
When open DetailViewController check if basket already contains curent item:
if ([self.basket objectForKey:[item objectForKey:@"ItemName"])
and if so, show that curent item already added to basket, and provide option to remove it or change amount.