Проблем с UIPickerView и NSUserDefaults

Имам UIPickerView с 2 компонента. Бих искал да запазя избора на потребителя и да го приложа следващия път, когато pickerView се покаже отново.

Ето моят код:


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

    NSUserDefaults *pickerViewSelectionDefaults = [NSUserDefaults standardUserDefaults];
    [pickerViewSelectionDefaults setInteger:row forKey:@"pickerViewSelectionKey"];
    [pickerViewSelectionDefaults synchronize];

}

}

И...


- (void)viewWillAppear:(BOOL)animated { 

    NSUserDefaults *pickerViewSelectionDefaults = [NSUserDefaults standardUserDefaults];
    [pickerView selectRow:[pickerViewSelectionDefaults integerForKey:@"pickerViewSelectionKey"] inComponent:0 animated:YES];

}

Благодаря!


person Community    schedule 08.08.2010    source източник


Отговори (1)


Не разбирам какъв е истинският ти проблем. Вашият код трябва да работи, като се има предвид, че въртите само компонент 0, а не 1. Има проблем със съхраняването на реда за два компонента в една настройка. Ако завъртите компонент 1 към ред 20 и след това заредите изгледа, той най-вероятно ще се срине, освен ако компонент 0 също има 20 реда.

Моля, предоставете съобщение за грешка или нещо, което показва какво не е наред. Също така се уверете, че вашият метод viewWillAppear действително е извикан.

person Merrimack    schedule 08.08.2010
comment
Проблемът е, че дори и с този код NSUserDefaults, всеки път, когато се покаже pickerView, избраният индекс в двата компонента е 0. Благодаря ви за помощта - person ; 08.08.2010
comment
Сигурни ли сте, че viewWillAppear дори се извиква? Също така се уверете, че елементите за избор са били попълнени по времето, когато се изпълнява viewWillAppear. - person Merrimack; 09.08.2010