2012-05-17 4 views
1

Я добавляю объект «м», чтобы NSMutableArray следующим образом:NSMutableArray AddObject перезаписывает данные

[m setObject:a forKey:@"a"]; 
    [m setObject:b forKey:@"b"]; 
    [m setObject:c forKey:@"c"]; 
    [m setObject:d forKey:@"d"]; 

    [myArray addObject:m]; 

    [m release]; 

Для одного объекта он работает отлично, но когда добавляются еще объекты, одни и те же значения повторяются для всех объектов туАггау.

Как этого избежать?

Пожалуйста, помогите.

Спасибо.

+1

вы делаете это в цикле? –

+2

Код, который вы опубликовали, в порядке. Вам нужно будет предоставить больше примеров кода и ошибок, если вы хотите получить решение. – Joel

+0

Нет цикла in in, поскольку первый раз мои данные вставляются при нажатии кнопки. Затем он вставляется после получения данных с сервера и получения уведомления об обновлении экрана. – iOSDev

ответ

9

При каждом заполнении и вставке необходимо создать отдельный экземпляр NSMUtablearray, иначе вы будете повторно использовать один и тот же экземпляр, поэтому в каждой позиции массива будет отображаться только последнее состояние.

NSMutableArray *myArray = [NSMutableArray array]; 
for (int i = 0 ; i != 10 ; i++) { 
    NSMutableDictionary *m = [NSMutableDictionary dictionary]; 
    // Presumably, this part is done differently on each iteration 
    [m setObject:a forKey:@"a"]; 
    [m setObject:b forKey:@"b"]; 
    [m setObject:c forKey:@"c"]; 
    [m setObject:d forKey:@"d"]; 
    [myArray addObject:m]; 
} 
+0

Я думаю, что он также может [myArray addObject: [m mutableCopy]]; чтобы избежать одной и той же проблемы с указателем –

+0

@KaanDedeoglu Это еще один способ избежать проблемы. Не должно быть никакого вызова 'release' на каждой вставке, хотя - он должен быть выпущен один раз, после завершения цикла. – dasblinkenlight

+0

Я пробовал выделять новый экземпляр каждый раз, но тот же вопрос – iOSDev

1

Попробуйте это:

NSMutableDictionary* m = [NSMutableDictionary dictionary]; 
[m setObject:@"1" forKey:@"a"]; 
[m setObject:@"2" forKey:@"b"]; 
[m setObject:@"3" forKey:@"c"]; 
[m setObject:@"4" forKey:@"d"]; 

NSMutableArray* myArray = [NSMutableArray array]; 
[myArray addObject:m]; 

NSLog(@"%@", m); 
NSLog(@"%@", myArray); 
Смежные вопросы