Проверяли ли вы свой источник данных для settingsPagePicker перед вызовом -selectRow: inComponent: animated, чтобы убедиться, что в этом индексе есть данные (3 в вашем примере кода)?
Как вы загружаете свои данные для своего источника данных? Вы можете сначала инициализировать свой источник данных в viewDidLoad, а затем вызвать selectRow, как только узнаете, что данные доступны.
ОБНОВЛЕНИЕ: Вот как должен выглядеть ваш код или как-то так:
- (void)viewDidLoad
{
[super viewDidLoad];
pickerDataSource = [[NSMutableArray alloc] init];
[pickerDataSource addObject:@"Item 01"];
[pickerDataSource addObject:@"Item 02"];
[pickerDataSource addObject:@"Item 03"];
[pickerDataSource addObject:@"Item 04"];
// Might want to move this to -viewWillAppear:animated
[settingsPagePicker selectRow:3 inComponent:0 animated:YES];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (pickerView == settingsPagePicker)
{
return [pickerDataSource objectAtIndex:row];
}
return @"";
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if (pickerView == settingsPagePicker)
{
return [pickerDataSource count];
}
return 0;
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView
{
return 1;
}