2010-04-09 4 views
0

Je fais une application pour le plaisir et je voudrais savoir comment mettre en œuvre un système de caisse/panier sur l'application.Comment mettre en œuvre système de caisse/panier

Fondamentalement, une liste de produits est tirée d'un serveur Web sous la forme d'un fichier XML, qui est ensuite affiché dans un contrôleur UITableView. Un clic sur la cellule amène l'utilisateur à un aperçu plus détaillé du produit. L'application devrait être en mesure d'obtenir le produit dans une chose de type panier, et c'est là que je suis coincé.

Existe-t-il des exemples de code que je pourrais examiner?

Répondre

0

Cette tâche est simple si vous choisissez un format approprié pour vos données. La représentation XML la plus naturelle dans ObjC est l'arborescence NSDictionaries/NSArrays. Dans le cas le plus simple, vous avez NSArray d'éléments (ceux que vous affichez dans tableview) chacun d'entre eux est NSDictionary avec des clés comme "ItemName", "ItemPrice", etc .. Il est facile de montrer dans le tableau:

-(UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    NSDictionary * item = [allItems objectAtIndex:indexPath.row]; 
    NSString * cellTitle = [item objectForKey:@"ItemName"]; 
    ... 
} 

Lorsque l'article cliquée ouvrez votre DetailViewController et passez référence à l'élément sélectionné:

-(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]; 

} 

pour afficher toutes les propriétés des éléments de contrôleur de détail.

Le panier est NSMutableDictionary de NSMutableDictionaries. Chaque clé d'élément de backet est une propriété d'élément unique parmi tous les éléments, par exemple "ItemName". Chaque valeur d'élément de backet doit contenir une référence à l'élément dans le tableau d'origine. En MyDetailViewController vous pouvez ajouter l'article au panier comme:

-(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"]]; 
} 

Lorsque chèque ouvert DetailViewController si panier contient déjà produit curent:

if ([self.basket objectForKey:[item objectForKey:@"ItemName"]) 

et si oui, montrent que l'article curent déjà ajouté au panier, et fournir option pour l'enlever ou changer le montant.

Questions connexes