2010-10-28 6 views
3

J'ai 2 doubles à chaque itération je veux ajouter à un NSMutableArray mais je ne peux pas sembler y arriver.Ajouter à NSMutableArray

NSMutableArray *touchArray = [[NSMutableArray alloc]init]; 
[touchArray addObject:[NSString stringWithFormat:@"%d", "%d", tapTotal, touchBegin]];  
NSLog(@"array: %@", touchArray); 

Les impressions de la console 14108 comme la valeur du tableau, je ne sais pas où ça vient, ce n'est pas la valeur soit sur des variables. Et XCode se plaint sur les deux premières lignes, « déclaration locale de « touchArray » cache variable d'instance. Je sais que je fais au moins une chose wronl

Merci pour toute aide, Robert

Répondre

6

d'abord, le 'problème de déclaration local': Vous avez déjà déclaré touchArray ailleurs, par conséquent, vous n'avez pas besoin de redéclare, juste (éventuellement) initialiser comme si touchArray = [[NSMutableArray alloc] init];

Deuxièmement: le double problème: theres un certain nombre: vous ajoutez une chaîne à la matrice, pas deux doubles. d'ajouter un double, vous avez besoin de l'envelopper dans un premier NSNumber:

[touchArray addObject:[NSNumber numberWithDouble:firstDouble]]; 
[touchArray addObject:[NSNumber numberWithDouble:secondDouble]]; 

aussi vous voulez imprimer chaque variable du tableau pour le vérifier, je crois, pas l'objet de tableau lui-même. pour ceci: NSLog(@"array[0] = %g", [[touchArray objectAtIndex:0] doubleValue]

éditer pour la clarification de réponse: ma réponse suppose que l'affiche veut ajouter deux doubles séparément au tableau, pas une chaîne avec deux valeurs dedans. Je pensais que je pourrais clarifier cela comme Kenny et moi avons eu des retards différents :)

Il ya beaucoup de mal ici, donc je suggérerais peut-être essayer de lire un livre de développement objectif c/iphone pour en savoir plus.

+0

double serait '% g'. – kennytm

+0

ahh bien sûr, ne pensait pas juste vu dans son poste :) –

+2

Encore plus facile: imprimer l'objet 'NSNumber':' NSLog (@ "tableau [0] =% @", [touchArray objectAtIndex: 0]) '. Plus facile encore: il suffit d'imprimer le tableau entier, comme l'a suggéré le demandeur: 'NSLog (@" array =% @ ", array)'. '- [NSArray description]' imprime son contenu au format pseudo-oldstyle-plist. –

5

Vous utilisez +stringWithFormat: Seule la première chaîne peut être la chaîne de formatage, le reste sera passé comme paramètre à formater Dans votre code, la chaîne de format est "%d", donc le runtime attendra exactement 1 entier, il voit l'adresse au 2ème "%d" est 14108, donc il va l'imprimer comme un nombre entier

Le code correct devrait être:

[NSString stringWithFormat:@"%g %g", tapTotal, touchBegin] 

(En général, %dint, %uunsigned, %gdouble et CGFloat, %@ → objets Objective-C, etc.)

+1

Ceci est en fait * incorrect *: '% d' attend un int, mais la valeur passé est un double. Les tailles de ces deux objets (dans le sens standard du mot C) diffèrent probablement, ce qui risque de perturber le traitement des varargs. Si vous voulez tronquer à int, vous devez explicitement convertir les valeurs doubles en int, par exemple '(int) tapTotal'. –

1

"local declaration of 'touchArray' hides instance variable" montre que vous avez déjà défini le même tableau ailleurs dans le code localement. Ou vous l'avez défini dans votre fichier .h

NSLog Impossible d'imprimer directement ce que vous avez dans un tableau. Si vous avez ajouté une chaîne comme premier objet (c.-à-indice 0), alors vous devez imprimer comme this-

NSLog(@"array: %@", [touchArray objectAtIndex:0]); 

Vive

Questions connexes