在iPhoneApp中向我的“购物车”添加对象会导致在多个索引的对象中添加条目

时间:2011-04-15 12:23:42

标签: iphone nsmutablearray

我有一个特殊的问题,我暂时无法调试,所以我终于在这里发帖了。

我有一个iPhone应用程序。它有一个购物车对象。 Cart对象内部是各种变量。其中包括一个NSMutable“MainDish”对象数组。每个“MainDish”对象本身由各种变量组成,其中“Sides”(NSMutable Array)是一个。

现在问题是,当用户选择MainDish时,说“AngusBurger”并且没有向sides数组添加任何内容,然后返回并立即选择另一个“AngusBurger”,但是这个添加了一边:“fries”,“coke ,碰巧两个“AngusBurger”菜肴都加入了它们。

只有在“AngusBurgers”连续订购的情况下才会发生这种情况,在2个类似的maindishes之间还有另一个主菜然后这种行为不会发生......

我很疑惑不确定到底发生了什么......

以下是选择边的ViewController中的代码:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    FoodItem *fm = [Cart.foodItemsArray lastObject];
        [fm.sidesArray addObject:_sidesItem];

}

非常感谢任何帮助 感谢

更多代码:


Inside ViewController-将fooditem添加到购物车:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    Cart = [CartSingleton getSingleton];
    [Cart addFoodItemToCart:selectedFoodItem];
}

购物车内载:

-(id)init
{
    self.foodItemsArray = [[NSMutableArray alloc]initWithCapacity:0];
}

-(void)addFoodItemToCart:(FoodItem *)itm
{
    numFoodItems++;
    [self.foodItemsArray addObject:itm];
}

FoodItem:

-(id)initWithObjects:(NSString *)_name 
         Description:(NSString *)_description
            Calories:(NSString *)_calories
               Price:(NSString *)_price
           photoPath:(NSString *)_pathToPhoto
            Category:(NSString*)_foodCategory

{
    self.foodName = _name;
    self.foodDescription = _description;
    self.foodCalories = _calories;
    self.foodPrice = _price;
    self.pathToPhoto = _pathToPhoto;
    self.foodCategory = _foodCategory;
    sidesArray = [[NSMutableArray alloc]initWithCapacity:0];
    return self;
}

将一个Sides项添加到FoodItem: (这是一个问题区域,如果只有连续食物是相同的类型,那么添加到以前的食物中的食物的一个项目也是如此)

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    Cart = [CartSingleton getSingleton];
    FoodItem *fm = [Cart.foodItemsArray lastObject];
    [fm.sidesArray addObject:_sidesItem];
}

SidesItem:

-(id)initWithObjects:(NSString *)_name 
         Description:(NSString *)_description
            Calories:(NSString *)_calories
               Price:(NSString *)_price
           photoPath:(NSString *)_pathToPhoto
            Category:(NSString*)_foodCategory

{
    self.sideName = _name;
    self.sideDescription = _description;
    self.sideCalories = _calories;
    self.sidePrice = _price;
    self.pathToPhoto = _pathToPhoto;
    self.sideCategory = _foodCategory;

    return self;
}

1 个答案:

答案 0 :(得分:0)

不要在“菜单”对象的购物车中添加引用,您必须创建它的副本。