Как добавитьObject NSMutableDictionary в NSMutableArray в цикле - PullRequest
24 голосов
/ 24 декабря 2009

Мне трудно добавить структуру данных в массив для создания массива словарей из цикла. Я просто знал, что addObject в NSMutableArray только добавляет указатель на него. Я хотел бы знать, как достичь своей цели.

Вот мой код:

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 будет содержать только дубликаты последних добавленных объектов Я застрял здесь, не в состоянии прогрессировать, чтобы отобразить правильные данные.

Любая помощь будет оценена.

Спасибо

Ответы [ 3 ]

27 голосов
/ 24 декабря 2009

попробуй сделать [workOrders addObject:[woRows copy]];

20 голосов
/ 15 сентября 2011

Я знаю, это немного поздно, и даже не то, что вы просили, но я думаю, вы хотели использовать [woRows setObject:forKey:] вместо [woRows setValue:forKey:].

7 голосов
/ 24 декабря 2009

переместить код создания словаря в цикл (внутри условия if)

woRows = [[NSMutableDictionary alloc] init];

вы используете тот же объект ...

...