2013-03-18 2 views
0

J'ai actuellement un tableau de boutons générés qui fonctionne très bien. En dehors de cela, lors de la retouche à l'intérieur de chaque bouton, vous appelez une fonction -(void)onTouch où des calculs sont effectués pour déterminer une action. Tout cela fonctionne très bien sauf que je voudrais stocker un historique des boutons pressés. J'ai essayé plusieurs façons de créer un NSMutableArray et de stocker les valeurs des boutons enfoncés, mais comme je ne peux déclarer le tableau que dans l'action -onTouch, chaque fois que l'on appuie sur un bouton, le tableau est réinitialisé pour qu'il ne se souvienne jamais bouge toi. Si j'essaie de déclarer le tableau dans mon en-tête et de le synthétiser à l'extérieur, j'obtiens l'erreur que nsmutable array n'est pas un programme de compilation ou qu'il ne stocke rien (la sortie du journal est "(null)". Code sur la façon de déclarer un tableau qui permet de stocker et d'ajouter les balises UIButton en dehors de l'endroit où l'événement presse UIButton arrive? Je vais poster votre code plus tard ce soir si ce n'est pas clair.NSMutableArray UIButton Presse Historique

Vive

+1

Veuillez poster votre code et les messages d'erreur du compilateur. – Gary

+0

self.myArray = [Tableau NSMutableArray]; – Till

Répondre

1
@property(nonatomic,retain)NSMutableArray *tapCollection; 

-(void)viewDidLoad{ 

    self.tapCollection = [[NSMutableArray alloc] init]; 
} 

-(void)onTouch:(id)sender{ 

    UIButton *btnTapped = (UIButton *)sender; 

    [self.tapCollection addObject:[NSNumber numberWithInt:btn.tag]]; 
} 
+0

Vous ne pouvez pas ajouter un entier à un tableau car ce n'est pas un objet. – Moxy

+1

'[self.tapCollection addObject: @ (btn.tag)];' – rmaddy

+0

@Moxy, oui vous pouvez. Je n'ai eu aucun problème à appeler NSInteger [] et à convertir le fichier button.tag en tableau. Cela étant dit, le code pour le faire est un peu plus compliqué que addObject: @ (button.tag). Ramshad, je vais essayer ta solution et voir comment elle va. Merci – NessyString

2

Vous devez non seulement déclarer le tableau, mais aussi il initialiser. Si vous n'initialisez, vous ne serez pas nécessairement un avertissement, mais vous obtiendrez beaucoup de données nul.

Vous ne voulez initialiser le tableau qu'une seule fois (comme vous l'avez remarqué) donc viewDidLoad est un bon endroit pour le faire. Un autre bon endroit est un accesseur personnalisé ...

- (NSMutableArray*)historyArray 
{ 
    if (!_historyArray) { 
     _historyArray = [[NSMutableArray alloc] init]; 
    } 
    return _historyArray; 
} 

Maintenant, la première fois que vous essayez de [self.historyArray addObject:sender], l'accesseur notera l'absence d'un historyArray, créer un et le retourner. La prochaine fois, elle ne sera pas recréée puisqu'elle existe déjà.

+0

Je vais essayer aussi, merci – NessyString