2009-12-24 4 views
24

У меня возникли трудности с добавлением структуры данных в массив для создания массива словарей из цикла. Я просто знал, что addObject в NSMutableArray только добавляет указатель на него. Я хотел бы знать, как достичь своей цели.Как добавить объект NSMutableDictionary в 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 массив будет иметь дубликаты последних объектов, добавленных только. Я застрял здесь, не смог проделать показ правильных данных.

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

Благодаря

ответ

27

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

+1

Это сработало, и мне нравится ваш подход и используется в моем коде. Любая идея, почему я не могу голосовать за ваш ответ? Он поменялся на ноль –

7

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

woRows = [[NSMutableDictionary alloc] init]; 

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

+1

Спасибо, это сработало. Любая идея, почему я не могу голосовать за ваш ответ? –

+0

даже у вас нет минимальной репутации, необходимой для голосования .... –

20

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

Смежные вопросы