SetObject forKey更新所有上一个项目

时间:2015-07-15 14:20:14

标签: ios xcode nsmutabledictionary

我正在寻找更新食品订单每当我调用一个方法时,该方法将保存订单数量并更新如果食品存在于字典中 这是我的代码:

-(void) addObjectsToArrayWithFoodName: (NSString *)foodName andPrice:(NSString *)price andCount:(NSString *)count andID:(NSString *)ID{
    [_arrDicFoodDetails removeAllObjects];

    if ([count isEqualToString:@"0"]) {
        [_dicFood removeObjectForKey:ID];
        return;
    }
    [_arrDicFoodDetails addObject:foodName];
    [_arrDicFoodDetails addObject:price];
    [_arrDicFoodDetails addObject:count];



    [_dicFood setObject:_arrDicFoodDetails forKey:ID];

    }
}

但是当我使用这段代码时会发生一些事情。 想象一下,我们添加了id(0)和count(1)的食物。 如果我们更新食物(0)和计数(2),再次全部好。 但是如果我们添加id(3)和count(1)的食物,它将更新食物(0)的记录太新的数据。

我希望你明白发生了什么......谢谢

1 个答案:

答案 0 :(得分:0)

每次都使用相同的数组。抛弃实例变量_arrDicFoodDetails并每次创建一个新数组:

-(void) addObjectsToArrayWithFoodName: (NSString *)foodName andPrice:(NSString *)price andCount:(NSString *)count andID:(NSString *)ID{
    if ([count isEqualToString:@"0"]) {
        [_dicFood removeObjectForKey:ID];
        return;
    }

    _dicFood[ID] = @[ foodName, price, count ];
}

然而,这句话有点令人担忧:

count isEqualToString:@"0"

数字不是字符串,因此请使用正确的数据类型。另外,请考虑使用自定义对象而不是数组来对数据和功能进行分组。