web-dev-qa-db-ja.com

ループでNSMutableDictionaryのObjectをNSMutableArrayに追加する方法

ループから辞書の配列を作成するために配列にデータ構造を追加するのが困難です。 NSMutableArrayのaddObjectがポインタを追加するだけであることを知っていました。私の目標を達成する方法を知りたいのですが。

これが私のコードです:

NSMutableDictionary *woRows = [[NSMutableDictionary alloc] init];
NSMutableArray *workOrders = [[NSMutableArray alloc] init];
while ([theScanner isAtEnd] == NO)
{
    if ([theScanner scanUpToCharactersFromSet:usSet intoString:&tempCol1] &&
        [theScanner scanString:@"{US}" intoString:NULL] &&
        [theScanner scanUpToCharactersFromSet:usSet intoString:&tempCol2] &&
        [theScanner scanString:@"{US}" intoString:NULL] &&
        [theScanner scanUpToCharactersFromSet:usSet intoString:&tempCol3]&&
        [theScanner scanString:@"{RS}" intoString:NULL])
    {
        [woRows  setValue:tempCol1 forKey:@"hours"];
        [woRows setValue:tempCol2 forKey:@"colMain"];
        [woRows setValue:tempCol3 forKey:@"colAddtl"];

        [workOrders addObject:woRows];
        [woRows release];
    }
}
[tmpString release];
[jobs addObject:workOrders];
[workOrders release];

上記のコードから、配列workOrdersには、最後に追加されたオブジェクトの複製のみが追加されます。正しいデータを表示することができないため、ここで立ち往生しました。

どんな助けでもありがたいです。

ありがとう

24
Ber Biji II

やってみてください[workOrders addObject:[woRows copy]];

27
Kenny Winker

確かに、これは少し遅れており、あなたが求めていたものではありませんが、[woRows setObject:forKey:]の代わりに[woRows setValue:forKey:]を使用したいと思います。

20
Akku

辞書作成コードをループ内に移動します(if条件内)

woRows = [[NSMutableDictionary alloc] init];

同じオブジェクトを使用しています...

7
Girish Kolari