2009-11-10 3 views
0
data = [[NSMutableArray arrayWithCapacity:numISF]init]; 
count = 0; 
while (count <= numISF) 
{ 
    [data addObject:[[rouge_col_data alloc]init]]; 
    count++; 
} 

Lorsque je fais un pas dans la boucle while, chaque objet dans le tableau de données est « hors de portée »hors de portée - Erreur NSMutableArray

rouge mise en œuvre d » données col ressemble à ceci ..

@implementation rouge_col_data 
@synthesize pos; 
@synthesize state; 
-(id) init { 
    self = [super init];  
    return self; 
} 
@end 

La plupart des tutoriels que j'ai pu trouver n'utilisent que NSStrings pour les objets dans ce type de tableaux.

-Merci Alex E

EDIT

data = [[[NSMutableArray alloc] initWithCapacity:numISF]retain]; 
//data = [[NSMutableArray arrayWithCapacity:numISF] retain]; 
count = 0; 
while (count < numISF) 
{ 

    [data addObject:[[[rouge_col_data alloc]init]autorelease]]; 

    count++; 

} 

toujours la même erreur, même lors de la commutation des 'données ='.

+0

Existe-t-il une meilleure façon de résoudre ce problème? – DevEarley

Répondre

3
  1. Vous n'avez pas besoin d'appeler init sur le résultat de votre arrayWithCapacity: appel. arrayWithCapacity: vous renvoie déjà un objet initialisé (mais autoreleased). Vous pouvez également appeler le [[NSMutableArray alloc] initWithCapacity:].
  2. Votre boucle présente une erreur d'une seule valeur; vous commencez à zéro, vous allez donc ajouter un objet supplémentaire. L'ajout de cet objet supplémentaire réussira - cela ne semble pas être ce que vous essayez de faire.
  3. Vous voulez probablement autorelease les objets que vous ajoutez à la matrice. Le tableau les conservera seul. Si vous avez besoin de conserver les objets eux-mêmes, c'est bien, mais il est assez fréquent de laisser le tableau faire la rétention pour vous.
  4. Vous devez retain le tableau lui-même, sinon il disparaîtra à la fin de la boucle d'événements.
2

La seule erreur que je peux repérer dans votre code est votre initialisation NSArray.

Où vous:

data = [[NSMutableArray arrayWithCapacity:numISF] init]; 

vous devriez faire:

data = [NSMutableArray arrayWithCapacity:numISF]; 

C'est parce que arrayWithCapacity est une méthode de fabrication, et vous retourner une instance autoreleased. Si vous souhaitez continuer à utiliser l'objet après cette méthode, vous aurez besoin de retain, et votre pourrait se ressembler:

data = [[NSMutableArray arrayWithCapacity:numISF] retain]; 
+0

Que vous ayez besoin de conserver le tableau dépend si vous en avez besoin après la fin de la méthode. – Chuck

+0

Oui, je vais mettre à jour la réponse juste au cas où. – pgb

Questions connexes