2009-12-22 10 views
1

J'ai un tableau qui contient des objets tableau. Un tableau de tableaux. Lorsque j'applique la méthode de description au tableau, je ne vois pas les données dans les tableaux internes. Voici le code:NSMutableArray Description Méthode - Tableau de tableaux

[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]); 

L'impression NSLog pour runScoresDataArray se lit comme il faut: Array1 contient: (USER1,34500)

Le NSLog pour highScoresArray lit comme suit: array2 contient: ((), (),())

Je m'attendais à voir les données pour chaque élément de tableau dans l'impression NSLog, plutôt que les parenthèses vides. Question: Comment puis-je utiliser la méthode de description pour imprimer le contenu d'un tableau de tableaux?

+0

Question rapide: Les types de référence de tableaux Objective-C, ou les types de valeur? –

+0

Les tableaux utilisés ici sont NSMutableArrays, dont les instances sont des références. (Obj-C prend également en charge les tableaux de type C, mais il est clair que cela ne se produit pas ici car des messages leur sont envoyés.) –

+0

J'espérais obtenir la réponse de l'OP. Parce que le fait de répondre à cette simple question rend le bug du code évident. –

Répondre

6

Lorsque vous -addObject: le runScoreDataArray-highScoresArray, ce n'est pas copier les valeurs dans le tableau, il est l'ajout d'une référence à la runScoreDataArray réelle au tableau parent.

Donc, quand vous allez alors effacer le runScoreDataArray avec -removeAllObjects, cela affecte aussi la référence dans le highScoresArray.

Selon ce que vous êtes après, vous voudrez peut-être quelque chose comme:

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

pour insérer une copie superficielle.