2011-01-04 4 views
0

У меня есть четыре NS-словаря, которые я бы хотел использовать для заполнения pickerview в зависимости от элемента управления. С кодом, который у меня есть, первый сегментированный элемент управления/pickerview работает нормально, но когда я переключаюсь на второй сегмент, представление сборщика загружает только часть второго словаря, то есть загружает то же количество строк, что и в первом словаре , Когда я меняю сегментированный элемент управления на третий или четвертый сегмент, он просто сбой при ошибке sigabrt, указывающий, что он не может индексировать item43, когда существует только 27. Это, как я подозреваю, связано с популяцией UItextfield, основанной на строке и объекте upickerview. Я думаю, проблема связана с тем, как у меня есть источник данных и набор делегатов.Сбой UIPickerView при переключении управления с разделением

#pragma mark - 

#pragma mark UIPickerViewDelegate 

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

if ([wine selectedSegmentIndex] == 0) 
    { 
    return [robskeys objectAtIndex:row]; 

} 
    if ([wine selectedSegmentIndex] == 1) 
    { 
     return [esabskeys objectAtIndex:row]; 
    } 

if ([wine selectedSegmentIndex] == 2) 
    { 
     return [lebskeys objectAtIndex:row]; 
    } 

else if ([wine selectedSegmentIndex] == 3) 
    { 
     return [sbskeys objectAtIndex:row]; 
    } 


    return @"Unknown title"; 
} 

#pragma mark - 

#pragma mark UIPickerViewDataSource 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if ([wine selectedSegmentIndex] == 0) 
    { 
     return robskeys.count; 
    } 

if ([wine selectedSegmentIndex] == 1) 
    { 
     return esabskeys.count; 
    } 

if ([wine selectedSegmentIndex] == 2) 
    { 
     return lebskeys.count; 
    } 

else if ([wine selectedSegmentIndex] == 3) 
    { 
     return sbskeys.count; 
    } 


    return 1; 
} 

#pragma mark - 

Любая помощь будет высоко ценится Спасибо

UPDATE

Используя следующие, когда segmentedcontrol изменяется работы. Кто-нибудь видит какие-либо проблемы в alloc, init, выдает один и тот же выборщик в viewDidLoad и в этом IBAction. Как вы, возможно, догадались, что UItextfield winespec называет coPicker не клавиатурой.

-(IBAction)ValueChanged:(id)sender { 

    [winespec resignFirstResponder]; 

    UIPickerView *coPicker = [[UIPickerView alloc] initWithFrame:CGRectZero]; 
    coPicker.tag = kCountryPickerTag; 
    coPicker.delegate = self; 
    coPicker.dataSource = self; 
    [coPicker setShowsSelectionIndicator:YES]; 
    winespec.inputView = countryPicker; 
    [winespec becomeFirstResponder]; 
    [coPicker release]; 

} 
+0

Какой код вы выполняете при выборе сегмента? – EmptyStack

+0

Я предполагаю, что значение ** selectedSegmentIndex ** где-то сбрасывается. – EmptyStack

+0

selectedSegementIndex не сбрасывается нигде. – Mattog1456

ответ

0

Вы перезагружаете UIPickerView при переключении источника данных? (Метод reloadAllComponents должен сделать трюк.)

Независимо, проблема заключается в том, что «из индекса» строка выбирается, так что вы, вероятно, также необходимо использовать selectedRowInComponent метод в UIPickerView, чтобы выбрать «безопасный» строка (первый пример) при переключении источника данных.

UPDATE

В сущности, когда вы (эффективно) изменить текущий источник данных с помощью сегментного контроля, вам нужно установить selectedRowInComponent к нулю и вызвать reloadAllComponents на вашем UIPickerView. То, что должно сортировать все это. Таким образом, вы можете поместить это в действие, которое вы используете для ответа на сегментированные изменения управления.

+0

@middaparka, я надеялся, что вы не прочь немного разобраться, когда я попробовал reloadAllComponents для самого длинного словаря, это не сработало, где я должен его поместить и с учетом того, что я использую didSelectRow для заполнить текстовые поля, как использовать selectedRowinComponent? – Mattog1456

+0

@ Mattog1456 - Я сейчас обновляю свой ответ - скоро. –

+0

@ middaparka- Я инициализирую init и освобождаю свой UIPickerview в представлении, загружался, когда я его анимировал и выходил в зависимости от того, какие текстовые поля введены, поэтому у меня возникают проблемы с использованием [pickerView reloadAllComponents] – Mattog1456