2014-07-12 3 views
2

J'ai un simple uipickerview et j'essaie de le remplir avec une liste de dr d'une base de données coredata. Je charge la liste des drs dans viewdidload et ai vérifié qu'ils sont là avec nslog statments. Après avoir vérifié qu'ils sont là, je fais un reloadallcomponents et mon pickerview montre un nombre approprié de "?" des notes. Quand je mets en points d'arrêt, je remarque que mon application passe à travers et obtient le nombre de lignes deux fois, et renvoie le nombre approprié, mais la méthode titleforrow ne se fait jamais appeler. Des pensées?UIPickerview ne pas appeler titleForRow

- (NSInteger)numberOfComponentsInPickerView: 
(UIPickerView *)pickerView 
{ 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView 
numberOfRowsInComponent:(NSInteger)component 
{ 
    NSLog(@"there are %d doctors",[self.doctors count]); 
    return [self.doctors count]; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row  forComponent:(NSInteger)component 
{ 
    NSLog(@"Row %d has dr %@",row,[self.doctors objectAtIndex:row]); 
    return [self.doctors objectAtIndex:row]; 
} 
+4

Avez-vous mis 'la delegate' en plus de son' dataSource' de la vue du sélecteur? – rmaddy

+0

'titleForRow:' et 'numberOfRowsInComponent:'/'numberOfComponentsInPickerView:' toutes les méthodes de source de données ne sont-elles pas? – nhgrif

+0

@nhgrif Me demandez-vous? Regarde les docs. – rmaddy

Répondre

0

Vous devez définir pickerView.dataSource = ... sur votre contrôleur;

+0

Fermer, c'était le délégué qui devait être mis. – turboc

0

Grâce à la réponse d'Igor, je suis sur la bonne piste. J'ai dû définir le délégué à soi-même dans ViewDidLoad. J'ai déjà eu une sortie nommée doctorPV pour la vue sélecteur dans la classe et parce que les méthodes de composants et lignes ont été appelées correctement, je pensais que le délégué a été inféré en incluant le protocole pickerviewdelegate. Je suppose que ce n'était pas le cas.

J'ai ajouté self.doctorPV.delegate = self à mon viewDidLoad et tout fonctionne comme par magie.

Merci à Igor.

0

.h

#import <UIKit/UIKit.h> 
@interface PickerViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource> 

.m

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     your picker view controller.delegate=self; 
    your picker view controller.dataSource=self; 
} 
Questions connexes