2009-10-24 5 views
1

J'ai une méthode liée à quatre boutons. Je veux créer un tableau contenant chaque bouton, puis récupérer et interagir avec un bouton du tableau. Le code que je bricolais avec ci-dessous. Lorsque j'essaie d'obtenir un bouton de la matrice et de lui envoyer un message, ça va kablooie.Comment puis-je stocker des UIButtons dans un tableau?

Des pensées sur ce que je fais mal?

Hack_DumpViewController.h

#import <UIKit/UIKit.h> 

@interface Hack_DumpViewController : UIViewController { 
    IBOutlet UIButton *redButton; 
    IBOutlet UIButton *greenButton; 
    IBOutlet UIButton *blueButton; 
    IBOutlet UIButton *yellowButton;  
    NSArray *buttonMapping; 
} 

- (IBAction) changeToYo:(id)sender; 
@property (nonatomic, retain) UIButton *redButton; 
@property (nonatomic, retain) UIButton *greenButton; 
@property (nonatomic, retain) UIButton *blueButton; 
@property (nonatomic, retain) UIButton *yellowButton; 
@property (nonatomic, retain) NSArray *buttonMapping; 


@end 

Hack_DumpViewController.m

#import "Hack_DumpViewController.h" 

@implementation Hack_DumpViewController 

@synthesize redButton; 
@synthesize greenButton; 
@synthesize yellowButton; 
@synthesize blueButton; 
@synthesize buttonMapping; 

- (IBAction) changeToYo:(id)sender { 
    NSLog(@"changing numbers!"); 
    for (UIButton *b in buttonMapping) { 
     [b setTitle:@"yo!"]; 
    } 
    NSLog(@"changed to numbers!"); 
} 


- (void)viewDidLoad { 
buttonMapping = [[NSArray alloc] initWithObjects:greenButton, redButton, yellowButton, blueButton, nil];  
} 
+0

Mise à jour pour intégrer la solution de Wevah à l'alloc NSArray. Le problème est que l'appel à [b setTitle ...] est toujours mécontent. – Bill

+0

Ah, il se trouve que je ne disais pas 'forState: UIControlStateNormal'. – Bill

Répondre

5

[NSArray arrayWithObjects:...] retourne un tableau autoreleased, donc au moment où vous l'utilisez, il n'existe plus et vous finissez par messagerie un pointeur non valide . Ce que vous voulez est [[NSArray alloc] initWithObjects:...] (rappelant de le libérer dans votre dealloc).

+0

Merci! Il entre maintenant dans la boucle for, mais il n'aime toujours pas quand j'essaye d'envoyer un message à b. :( – Bill

1

Pourquoi pas les vues étiquette dans le générateur d'interface et les traiter comme un tableau, beaucoup plus facile

+0

Pouvez-vous élaborer? – Bill

+2

Je pense qu'il veut dire donner à chaque bouton une étiquette de 0 à 3 et ensuite en utilisant simplement une boucle 'for' standard (je préfère les références directes, mais cette méthode devrait fonctionner, aussi). – Wevah

Questions connexes