2009-12-12 4 views
1

J'essaie d'apprendre à utiliser UIPickerView, et je ne sais pas pourquoi ma vue d'alerte imprime toujours le premier élément du tableau (sélecteur), ou toute autre chose. J'ai une presse à bouton défini pour le sélecteur comme:UIPickerView, impossible d'obtenir des données du tableau

- (IBAction)buttonPressed { 
    NSInteger row = [myPicker selectedRowInComponent:0]; 
    NSString *s = [myPickerData objectAtIndex:row]; 
    NSLog(@"%@", s); 
    NSString *title = [[NSString alloc] initWithFormat:@"You selected, %@", s]; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title 
                message:@"Message" 
                delegate:nil 
              cancelButtonTitle:@"ok" 
              otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    [title release]; 
} 

mon tableau défini comme:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSArray *array = [[NSArray alloc] initWithObjects:@"0", @"1", @"2", nil]; 
    self.myPickerData = array; 
    [array release]; 
} 

-je me connecter les sorties lorsque le sélecteur est changé, et les valeurs ne me changer à 0, 1 , 2, en conséquence.

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    NSLog(@"%@", [myPickerData objectAtIndex:row]); 
} 

Mais la vue d'alerte ne fonctionne jamais. Donc, je ne sais pas ce que je fais mal ici.

Répondre

1

Je suppose qu'il vous manque une connexion dans votre fichier nib, en particulier depuis la sortie myPicker vers l'instance UIPickerView. Si tel était le cas, myPicker serait nul, et si la ligne

NSInteger row = [myPicker selectedRowInComponent:0]; 

aurait toujours mis en ligne à 0, ce qui explique pourquoi vous affichiez toujours le premier élément de votre tableau. En plus de vérifier votre fichier nib, vous pouvez également le confirmer en définissant un point d'arrêt dans la méthode buttonPressed et en vérifiant si myPicker est nul.

Vous avez avez une connexion de votre prise de délégué/dataSource UIPickerView à votre classe de contrôleur, ce qui explique pourquoi vos méthodes de délégué sont appelées. Mais vous avez besoin d'une connexion dans l'autre direction pour que la méthode de votre bouton fonctionne correctement.