【问题标题】:SetObject forKey Updates All Previous ItemSetObject forKey 更新所有以前的项目
【发布时间】:2015-07-15 14:20:13
【问题描述】:

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

-(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) 的食物,一切都很好。 如果我们更新 food (0) 和 count(2) ,那么一切都很好。 但是如果我们添加 id (3) 和 count (1) 的食物,它会更新 food(0) 的记录太新的数据。

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

【问题讨论】:

  • 使用本地数组(或本地自定义对象)。删除 _arrDicFoodDetails,并使用本地数组

标签: ios xcode nsmutabledictionary


【解决方案1】:

您每次都使用相同的数组。抛弃那个实例变量_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"

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

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多