У меня есть способ загрузить данные из веб-службы и заполнить массив, он отлично работает (назовем его «get_data»). Я использую этот массив («arr») как источник данных для представления picker («pv»), он также отлично работает, когда я запускаю свое приложение, pickerview заполнен элементами. Однажды я решил использовать «индикатор активности» («ai»), и теперь «pv» всегда пуст, и я понятия не имею, как его исправить. Следующий мой код:Как заполнить подборку данными и одновременно запустить индикатор активности?
- (void) viewDidLoad {
[super viewDidLoad];
[ai startAnimation]; // ACTIVITY INDICATOR STARTS SPINNING.
[self performSelector:@selector(get_data) // FILL ARRAY.
withObject:nil
afterDelay:0]; }
//-------------------------------------------------------------------
- (void) get_data { // CALL WEB SERVICE, FILL ARRAY WITH JSON DATA.
[ai stopAnimation]; } // SPINNING STOPS AFTER LONG TASK.
//-------------------------------------------------------------------
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1; }
//-------------------------------------------------------------------
- (NSInteger)pickerView :(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
return [arr count]; }
//-------------------------------------------------------------------
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component {
return [arr objectAtIndex:row]; }
//-------------------------------------------------------------------
- (void) pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row
inComponent:(NSInteger)component {
index = [pv selectedRowInComponent:0]; } // INDEX IS A GLOBAL INT.
//-------------------------------------------------------------------
- (NSAttributedString *) pickerView:(UIPickerView *)pickerView
attributedTitleForRow:(NSInteger)row
forComponent:(NSInteger)component {
NSString * title = [arr objectAtIndex:row];
NSAttributedString * attString = [[NSAttributedString alloc]
initWithString:title attributes:
@{NSForegroundColorAttributeName:
[UIColor blackColor]}];
return attString; }
Я использовал «показатели деятельности», прежде чем с «performSelector», и они прекрасно работали. Я не понимаю, почему методы pickerview больше не работают с массивом, поэтому мой вопрос: как заполнить данные pickerview и одновременно запустить индикатор активности?
Если я изменить viewDidLoad, как это, pickerview работает, но индикатор активности не:
- (void) viewDidLoad {
[super viewDidLoad];
/* [ai startAnimation]; // ACTIVITY INDICATOR STARTS SPINNING.
[self performSelector:@selector(get_data) // FILL ARRAY.
withObject:nil
afterDelay:0]; */
[self get_data];
}
Попробуйте положить точку прерывания в любой из ваших источников данных источников данных, чтобы узнать, попадают ли они после завершения вашего веб-сервиса, а индикатор активности прекращается. И убедитесь, что 'arr' содержит объекты, которые, по вашему мнению, содержат. – Stonz2
Дорогой Stonz2, я сделал то, что вы предложили, arr заполнен данными, но методы pickerview вообще не выполняются. –