Два PickerViews в вопросе сохранения View? - PullRequest
0 голосов
/ 21 марта 2010

Я пытаюсь иметь 2 вида сборщика в одном представлении. Это работает за исключением двух вещей. Если в одном окне выбора больше строк, чем в другом, происходит сбой приложения при выборе элемента из окна выбора с большим количеством элементов. Кроме того, я создал NSLog для сборщиков, и консоль показывает, что я выбираю два элемента одновременно, хотя на самом деле я имею дело только с одним сборщиком. Я знаю, это звучит немного запутанно, но я включаю весь код. Заранее спасибо.

list и list2 являются NSMutableArrays

список состоит из 4 пунктов list2 имеет 5 пунктов

Есть ошибка:

* Завершение работы приложения из-за необработанного исключения 'NSRangeException', причина: '* - [NSCFArray objectAtIndex:]: index (4) за пределами (4)'

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView{
    if([thePickerView isEqual:pickerView1 ]){       
        return 1;
    }
    else if([thePickerView isEqual:pickerView2]){ 

        return  1;
    }

    else{
        return 0;
    }
}

-(NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component{

    if([thePickerView isEqual:pickerView1 ]){ 
        return [list count];
    }
    else if([thePickerView isEqual:pickerView2]){       
        return [list2 count];
    }

    else{
        return 0;
    }
}

-(NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{

    if([thePickerView isEqual:pickerView1 ]){ 
        return [list objectAtIndex:row];
    }
    else if([thePickerView isEqual:pickerView2]){       
        return [list2 objectAtIndex:row];
    }

    else{
        return 0;
    }

} 

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    NSLog(@"Selected item %@. Index of selected item:%i", [list objectAtIndex:row], row);
    NSLog(@"Selected item %@. Index of selected item:%i", [list2 objectAtIndex:row], row);
    NSLog(@"Selected item %@. Index of selected item:%i", [list3 objectAtIndex:row], row);

if([thePickerView isEqual:pickerView1 ]){
//Do Something
}
else if([thePickerView isEqual:pickerView2 ]){
//Do Something
}
else if([thePickerView isEqual:pickerView3 ]){
//Do Something
}
}

1 Ответ

2 голосов
/ 21 марта 2010

Ваша проблема здесь:

NSLog(@"Selected item %@. Index of selected item:%i", [list objectAtIndex:row], row);
NSLog(@"Selected item %@. Index of selected item:%i", [list2 objectAtIndex:row], row);
NSLog(@"Selected item %@. Index of selected item:%i", [list3 objectAtIndex:row], row);

То, что происходит, - то, что одному из вышеупомянутых списков посылается сообщение, чтобы возвратить объект, который находится вне его границ.Перед отправкой сообщения в журнал вы должны проверить, с какого устройства выбора поступил звонок:

if([thePickerView isEqual:pickerView1 ]){
  NSLog(@"Selected item %@. Index of selected item:%i", [list objectAtIndex:row], row);
  //Do Something
}
else if([thePickerView isEqual:pickerView2 ]){
  NSLog(@"Selected item %@. Index of selected item:%i", [list2 objectAtIndex:row], row);
  //Do Something
}
else if([thePickerView isEqual:pickerView3 ]){
  NSLog(@"Selected item %@. Index of selected item:%i", [list3 objectAtIndex:row], row);
  //Do Something
}
...