Как внедрить систему оформления заказа / корзины - PullRequest
0 голосов
/ 09 апреля 2010

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

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

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

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

1 Ответ

0 голосов
/ 09 апреля 2010

Эта задача проста, если вы выбираете подходящий формат для ваших данных. Наиболее естественным представлением 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"])

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

...