2009-12-22 2 views
1

У меня есть массив, содержащий объекты массива. Массив массивов. Когда я применяю метод описания к массиву, я не вижу данные во внутренних массивах. Вот код:NSMutableArray Описание Метод - массив массивов

[runScoreDataArray addObject:[NSString stringWithString:currentUser]]; 
[runScoreDataArray addObject:[NSNumber numberWithDouble:mainScores.scoreTotal]]; 

NSLog(@"Array1 contains: %@", [runScoreDataArray description]); 

// Now add the array runScoreDataArray to the Array highScoresArray 
[highScoresArray addObject: runScoreDataArray]; 

// Empty the runScoresData Array after each run. 
[runScoreDataArray removeAllObjects]; 

NSLog(@"Array2 contains: %@", [highScoresArray description]); 

NSLog распечатке для runScoresDataArray гласит, что необходимо: Array1 содержит: (USER1,34500)

NSLog для highScoresArray гласит: array2 содержит: ((), (),())

Я ожидал увидеть данные для каждого элемента массива в распечатке NSLog, а не в пустых скобках.

Вопрос: Как я могу использовать метод описания для распечатки содержимого массива массивов?

+0

Быстрый вопрос: являются ли ссылочные типы Objective-C массивами или типами значений? –

+0

Здесь используются массивы NSMutableArrays, экземплярами которых являются ссылки. (Obj-C также поддерживает массивы C-стиля, но ясно, что здесь не происходит, потому что сообщения отправляются им.) –

+0

Я надеялся получить ответ OP. Поскольку ответ на этот простой вопрос делает ошибку в коде очевидной. –

ответ

6

Когда вы -addObject:runScoreDataArray к highScoresArray, это не копированию значения в массиве, это добавление ссылки на фактический runScoreDataArray для родительского массива.

Поэтому, когда вы затем выходите и очищаете runScoreDataArray с -removeAllObjects, это также влияет на ссылку внутри highScoresArray.

В зависимости от того, что вы после этого, вы можете что-то вроде:

[highScoresArray addObject: [NSArray arrayWithArray:runScoreDataArray]]; 

вставить неполную копию.

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