2

NSMutableDictionaries私はいくつかをNSMutableArrayスローforループに格納しようとします:

NSMutableArray *productsIdAndQuantities = [[NSMutableArray alloc]init];
NSMutableDictionary *element = [[NSMutableDictionary alloc]init];

for (id object in shoppingArray) {
    [element setObject:[object valueForKey:@"proId"] forKey:@"id"];
    [element setObject:[object valueForKey:@"qty"] forKey:@"quantity"];
    NSLog(@"%@",element);//tested, it's different on every iteration
    [productsIdAndQuantities addObject:element];
}

ループが終了した後、デバッグを試みましたproductsIdAndQuantitiesが、上でループしたアイテムの正確な数が含まれていることがわかりましたが、値は1つです。

これが私が意味することです:

ループ内(NSLog(@"%@",element);):

{
    id = 13293;
    quantity = "-2";
}
{
    id = 12632;
    quantity = "-5";
}

ループ後(NSLog(@"%@",productsIdAndQuantities);同じ値!!!!!):

(
    {
        id = 12632;
        quantity = "-5";
    },
    {
        id = 12632;
        quantity = "-5";
    }
)
4

1 に答える 1

6

同じ辞書を配列に追加しています。代わりにこれを使用して、反復ごとに新しい辞書を割り当てます。

NSMutableArray *productsIdAndQuantities = [[NSMutableArray alloc]init];
for (id object in shoppingArray) {
    NSMutableDictionary *element = [[NSMutableDictionary alloc]init];
    [element setObject:[object valueForKey:@"proId"] forKey:@"id"];
    [element setObject:[object valueForKey:@"qty"] forKey:@"quantity"];
    NSLog(@"%@",element);//tested, it's different on every iteration
    [productsIdAndQuantities addObject:element];
}

注:これは、ARCを使用していることを前提としています。そうしないと、辞書が右、左、中央に漏れてしまいます...

于 2013-03-15T21:28:06.747 に答える