2012-12-04 2 views
0

J'essaie d'ajouter des objets UIButton à un tableau, mais ils échouent à le faire. Chaque fois que j'appelle [nombre de pixels] ou [nombre de couleurs], il renvoie 0. J'ai essayé d'utiliser [self.arrayName addObject: myObject] et [arrayName addObject: myObject] mais aucun ne semble fonctionner. Je suis plutôt novice en Objective-C, donc ça semble probablement idiot de ma part, mais ça me bouscule depuis plus d'une heure.Impossible de faire fonctionner addObject sur NSMutableArray

Voici le code pour ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 
NSMutableArray *pixels; 
NSMutableArray *colors; 
} 
@property (nonatomic, retain) NSMutableArray *pixels; 
@property (nonatomic, retain) NSMutableArray *colors; 
@end 

Et voici le code correspondant de ViewController.m

int x = 30; 
int y = 60; 
for(int i=0; i<10; i++) { 
     UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x,y,20,20)]; 
     [self.pixels addObject:button]; 
     x += 20; 
     y += 20; 
} 

Je l'ensemble du projet zippé qui peut être téléchargé ici: http://mdl.fm/pixelated.zip

Merci d'avance à tous ceux qui peuvent aider!

+7

Avez-vous déjà initialisé vos baies? – rdelmar

+0

Où les initialiserais-je? J'ai essayé dans ViewController.h mais il ne cesse de dire ";" à la fin de la liste de déclaration. Je l'ai également essayé à l'intérieur de init() sur ViewController.m et à l'intérieur de viewDidLoad() sur ViewController.m mais aucun n'a fonctionné. – SISYN

+0

À droite, les messages nuls targés sont ignorés (à l'exception de NSControl). –

Répondre

4

Essayez d'ajouter ce avant que vous essayez d'utiliser les tableaux:

NSMutableArray *pixels = [[NSMutableArray alloc] init]; 

tableaux en Obj-C doivent être initialisées avant d'être utilisées. Comme les méthodes d'appel sur une instance nulle retournent juste zéro dans Obj-C, il est facile de le faire et de ne pas remarquer jusqu'à ce que votre tableau ne stocke pas ce que vous pensez qu'il devrait le faire.

Modifier pour ajouter des commentaires informations:

Vous pouvez mettre l'initialisation dans la méthode -ViewDidLoad, de sorte qu'ils sont prêts à aller une fois que le ViewController lui-même est prêt. Assurez-vous de les retain, donc ils ne sont pas automatiquement récupérés.

+0

Mais comme @rdelmar l'a souligné, il est aussi important de le faire que de le faire. – trudyscousin

+0

Où recommanderiez-vous de mettre ceci? Si je le mets dans viewDidLoad, il ne sera disponible qu'à l'intérieur de cette méthode. J'ai aussi une autre question. Quand j'utilise [colors addObject: colorObject], il ajoute au tableau fin, mais il me donne un message d'avertissement disant "La déclaration locale des 'couleurs' masque la variable d'instance". Je peux me débarrasser de l'erreur en la changeant en [self.colors addObject: colorObject] mais ensuite il ne s'ajoute pas au tableau. Aucune suggestion? Merci pour votre aide jusqu'à présent. – SISYN

+0

Modifiez le nom du tableau en passant de "colors" à quelque chose de moins susceptible d'entrer en collision avec d'autres noms de variables. Par exemple, ColorArr. – Almo

2

Vous avez initialisé les pixels dans une méthode init - init n'est pas appelé pour un contrôleur que vous avez configuré dans un storyboard. Modifiez cela en initWithCoder: ou déplacez les initialisations de votre tableau vers viewDidLoad.

Questions connexes