Метод reloadComponent в UIPickerView

В справке написано, что:

Вызов этого метода заставляет представление выбора запрашивать у делегата новые данные для данного компонента.

Я добавил несколько точек останова в:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

когда я вызываю метод reloadComponent, но ни один из них не был вызван. В чем проблема?


person Daemon    schedule 16.03.2011    source источник
comment
вы указали правильный индекс в reloadComponent? попробуйте вызвать reloadAllComponents   -  person Evgen Bodunov    schedule 16.03.2011
comment
Проверьте, подключили ли вы соединения «Источник данных» и «Делегирование» для pickerView к владельцу файла. Надеюсь, это поможет вам.   -  person Parth Bhatt    schedule 16.03.2011
comment
Извините, я уже установил делегата и источника данных на владельца файла. Но это не сработало.   -  person Daemon    schedule 16.03.2011


Ответы (1)


Вам необходимо установить для свойства dataSource объекта pickerView экземпляр класса, который реализует протокол UIPickerViewDataSource.

Я думаю, что документация относится к «делегату», как в шаблоне делегирования разработки программного обеспечения, в отличие от свойства delegate класса, которое, вероятно, немного вводит в заблуждение.

person James Bedford    schedule 16.03.2011
comment
я вызвал reloadAllComponents в методе viewWillAppear, это нормально? - person Daemon; 16.03.2011
comment
Вызов его туда кажется нормальным. Вы проверили, что ваш источник данных настроен так, как вы ожидаете? Попробуйте установить точку останова на reloadAllComponents и посмотреть в отладчике, все ли так, как вы ожидаете (или распечатать значения непосредственно перед этим вызовом, используя операторы NSLog)? - person James Bedford; 16.03.2011