NSRangeException при попытке установить значение UIPickerView по умолчанию - PullRequest
1 голос
/ 15 июля 2011

У меня есть UIPickerView в поповере. Я просто пытаюсь установить значение по умолчанию / начальное значение в окне выбора, прежде чем появится всплывающее окно. Вот код, который я использую для создания и отображения всплывающего окна (в методе, обрабатывающем действие кнопки касания):

- (IBAction) handleClickStepTimeButton: (id)sender
{
    UIViewController *timePickerController = [UIViewController alloc];

    UIPickerView *timePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 100, 180)];
    timePicker.delegate = self;
    timePicker.showsSelectionIndicator = YES;
    [timePickerController.view addSubview:timePicker];

    UIPopoverController *timePickerPopoverController = [[UIPopoverController alloc] initWithContentViewController:timePickerController];
    timePickerPopoverController.popoverContentSize = CGSizeMake(100, 200);

    UIButton *stepTimeButton = (UIButton *)sender;

    [timePickerPopoverController presentPopoverFromRect:CGRectMake(stepTimeButton.frame.size.width, (stepTimeButton.frame.size.height / 2), 1, 1) inView:stepTimeButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

    [timePicker selectRow:(currentStep.length - 1) inComponent:1 animated:YES];
}

У меня нет проблем с созданием popover и UIPickerView при каждом нажатии этой кнопки, потому что это происходит не очень часто и потому что значения UIPickerView - это просто небольшое число целых чисел. Вот код, который я использую для добавления значений в представление:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return 8;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)rowId forComponent:(NSInteger)component {
    return [NSString stringWithFormat:@"%d", (rowId + 1)];
}

Моя проблема в том, что каждый раз, когда я показываю поповер, я получаю исключение NSRangeException в строке [timePicker selectRow.... Этот вид имеет смысл для меня, потому что UIPickerView еще не отображается. Но используя эту логику ... как можно установить значение по умолчанию / начальное значение для UIPickerView?

Я уверен, что здесь есть простое решение, но я просто не вижу его ...

Спасибо

1 Ответ

2 голосов
/ 15 июля 2011

Проверьте, допустимо ли количество компонентов, и currentStep.length - 1 не превышает 8.

Ваша основная проблема заключается в том, что вы не устанавливаете dataSource сборщика.Добавить

timePicker.dataSource = self;
...