2010-04-09 2 views
0

Я создаю приложение для удовольствия и хотел бы знать, как реализовать систему checkout/basket в приложении.Как реализовать систему checkout/basket

В основном, список продуктов втягивается с веб-сервера в виде XML-файла, который затем отображается в контроллере UITableView. Кран на ячейке позволяет пользователю получить более подробный обзор продукта.

Приложение должно быть в состоянии получить продукт в корзину типа вещи, и это то, где я застрял.

Есть ли образцы кода, на которые я могу взглянуть?

ответ

0

Эта задача проста, если вы выбираете подходящий формат для своих данных. Наиболее естественным представлением 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 элемент уже добавлен в корзину, и обеспечить возможность удалить или изменить сумму.