24

配列にデータ構造を追加して、ループから辞書の配列を作成するのが困難です。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 には、最後に追加されたオブジェクトの複製のみが含まれます。ここで立ち往生して、正しいデータを表示することができませんでした。

どんな助けでも大歓迎です。

ありがとう

4

3 に答える 3

27

やってみる[workOrders addObject:[woRows copy]];

于 2009-12-24T11:07:34.720 に答える
20

私は知っています、これは少し遅れており、あなたが求めていたものではありませんが、[woRows setObject:forKey:]代わりに[woRows setValue:forKey:].

于 2011-09-15T14:29:41.970 に答える
7

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

woRows = [[NSMutableDictionary alloc] init];

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

于 2009-12-24T11:13:52.797 に答える