2010-11-16 3 views
0

question rapide concernant Array's dans xcode. J'ai ht le code suivant, qui est censé passer par un tableau de chaînes qu'il a obtenu via php et JSON, et trunner ces chaînes dans un objet personnalisé avec les chaînes comme les ivars pour l'objet puis ajouter cet objet à un nouveau tableau :Problème lors de l'ajout d'objets personnalisés à Mutable Array

for (int i = 0; i<[list count]; i++) { 
     Article *article = [[Article alloc] init]; //creates custom object 
     article.uid = [[list objectAtIndex:i] objectAtIndex:0]; 
     article.title = [[list objectAtIndex:i] objectAtIndex:1]; //adds string as ivars 
     article.description = [[list objectAtIndex:i] objectAtIndex:2]; 
     articleArray = [[NSMutableArray alloc] init]; //inits the new array 
     [articleArray addObject:article]; //should add the object but seems to fail 
     [article release]; //releases the object 
     NSLog(@"%@", article.description); 
    } 
    NSLog(@"%d", [articleArray count]); 
    NSLog([articleArray description]); 
} 

le code renvoie des valeurs correctes en utilisant NSLog(@"%@", article.description); mais pas la bonne longueur pour le nouveau tableau et il ajoute qu'une seule valeur à la matrice qui est la chaîne pour article.description qui fait aucun sens pour moi. Le tableau liste contient 2 éléments dont chacun est constitué de tableaux contenant eux-mêmes les chaînes.

Répondre

6

Vous recréez le articleArray dans chaque boucle. Declarate à l'extérieur, et il fonctionnera:

NSMutableArray *articleArray = [[NSMutableArray alloc] init]; //inits the new array 
for (int i = 0; i<[list count]; i++) { 
     Article *article = [[Article alloc] init]; //creates custom object 
     article.uid = [[list objectAtIndex:i] objectAtIndex:0]; 
     article.title = [[list objectAtIndex:i] objectAtIndex:1]; //adds string as ivars 
     article.description = [[list objectAtIndex:i] objectAtIndex:2]; 
     [articleArray addObject:article]; //should add the object but seems to fail 
     [article release]; //releases the object 
     NSLog(@"%@", article.description); 
    } 
    NSLog(@"%d", [articleArray count]); 
    NSLog([articleArray description]); 
} 

Vous pouvez également utiliser plus sympathique (NSArray * ListElement dans la liste) syntaxe à la place.

+0

Merci! Je savais que ce serait quelque chose de simple qui me manquait. – SamRowley

+0

Note pour les lecteurs plus récents qui trébuchent comme je l'ai fait: l'exemple de code inclut un exemple de libération d'une variable après utilisation - cette version explicite est interdite dans un projet utilisant le Automatic Reference Counting (ARC) - ignorez simplement cette ligne et elle fonctionne bien. – Jonathan

+2

@ user3152873 - Pour être juste, c'est le cas avec tout ce qui est écrit ici en utilisant le comptage manuel des références, dont il y a environ 2000 réponses dans une recherche rapide. –