2012-04-01 2 views
1

Je rencontre des problèmes pour boucler un ensemble de UITextFields créés dynamiquement et stocker ces valeurs sous la forme d'un double à ajouter à un tableau plus tard. Je suis encore assez novice dans la programmation d'obj-c, alors ne me quittez pas si cette question semble triviale. Merci. C'est ce que j'ai jusqu'ici.Boucle à travers UITextField et stocker les valeurs doubles

NSMutableArray *textFieldCashArray = [[NSMutableArray alloc] init]; 
double textFieldCash; 
for (int y=0; y<25; y++) {  
    UITextField *myLabel = (UITextField *)[self.view viewWithTag:y];    
    textFieldCash = [myLabel.text doubleValue]; 
    [textFieldCashArray addObject:[NSNumber numberWithDouble:textFieldCash]];  
} 

PS et est ici le message d'erreur que je reçois

Pro[962:b303] -[UIControl text]: unrecognized selector sent to instance 0x680f850 
2012-04-01 16:05:46.305 iFinance Pro[962:b303] *** Terminating app due to uncaught  exception 'NSInvalidArgumentException', reason: '-[UIControl text]: unrecognized selector sent to instance 0x680f850' 
*** Call stack at first throw: 
+0

Où se trouve exactement ce code dans votre ViewController? –

+0

Ces 'UITextField' sont-ils dans un' UITableView'? –

Répondre

2

Je pense que ce qui se passe ici est que la variable de boucle est utilisée comme balise, et la boucle commence à zéro . viewWithTag répondra soit au récepteur soit à l'une de ses sous-vues avec une balise donnée, donc si la vue principale du contrôleur de vue a tag == 0 (ce qu'elle fait probablement), votre première demande de texte est envoyée à cette vue de niveau supérieur.

Essayez de définir les balises de champ de texte sur une valeur différente de zéro, en commençant par SOME_OFFSET. Puis dans votre boucle:

for (y=0; y<25; y++) { 
    UITextField *myLabel = (UITextField *)[self.view viewWithTag:y+SOME_OFFSET]; 
    // ... 
} 
+0

+1 agréable, bien repéré. –

+0

Merci, votre solution fonctionne! – SNV7

0

Vous devez créer une matrice dans un premier temps:

NSMutableArray *textFieldCashArray = [NSMutableArray array]; 

Modifier
Votre journal d'erreur montre que vous reçoivent un autre objet UIControl (UIBtton par exemple) au lieu de UITextField. Vérifiez vos tags sur xib (ou l'algorithme si vous définissez par programme) et assurez-vous que les objets UITextField ont des balises correspondantes

1

danh a certainement raison sur la cause et la solution à ce problème. Juste pour ajouter un peu, des cas comme celui-ci peuvent être évités en vérifiant la classe avant de lancer. Où est exactement ce code dans votre ViewController?

if ([[self.view viewWithTag:y] isKindOfClass:[UITextField class]]) { 
    UITextField *myLabel = (UITextField *)[self.view viewWithTag:y];    
    textFieldCash = [myLabel.text doubleValue]; 
    [textFieldCashArray addObject:[NSNumber numberWithDouble:textFieldCash]]; 
} 
Questions connexes