views:

33

answers:

1

Hi, I'm making an app for fun and would like to know how to implement a checkout/basket system on the app.

Basically, a list of products is pulled in from a web server in form of XML file, which is then displayed in a UITableView controller. A tap on the cell takes the user to a more detailed overview of the product.

The app would need to be able to get the product into a basket type thing, and this is where I'm getting stuck.

Are there any code samples that I could take a look at?

A: 

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.

Vladimir