Как я могу сохранить вторую строку UIPickerView в NSUserDefaults?

#iphone #ios #uipickerview #nsuserdefaults #rows

#iPhone #iOS #uipickerview #nsuserdefaults #строки

Вопрос:

У меня есть pickerView с двумя строками, и мне нужно сохранить положение обеих в NSUserDefaults. Я успешно сохранил первую строку с помощью этого кода:

 - (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {    
    NSInteger selectedRow = [thePickerView selectedRowInComponent:0];

    [[NSUserDefaults standardUserDefaults] setInteger:selectedRow forKey:@"picker"];
}
  

И я не понимаю, как добавить вторую.

С помощью этого кода я возвращаю позицию:

 -(void)viewWillAppear: (BOOL) animated {
    NSUserDefaults *pickerViewSelectionDefaults = [NSUserDefaults standardUserDefaults];
[picker selectRow:[pickerViewSelectionDefaults integerForKey:@"picker"] inComponent:0 animated:YES];
[picker selectRow:[pickerViewSelectionDefaults integerForKey:@"picker"] inComponent:1 animated:YES];
}
  

Ответ №1:

Попробуйте это:

 - (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row
             inComponent:(NSInteger)component {    
    NSInteger selectedRow = [thePickerView selectedRowInComponent:component];
    NSString *key = [NSString stringWithFormat:@"picker%d", component];

    [[NSUserDefaults standardUserDefaults] setInteger:selectedRow forKey:key];
}
  

и это

 -(void)viewWillAppear: (BOOL) animated {
    NSUserDefaults *pickerViewSelectionDefaults = [NSUserDefaults standardUserDefaults];
    [picker selectRow:[pickerViewSelectionDefaults integerForKey:@"picker0"] 
        inComponent:0 animated:YES];
    [picker selectRow:[pickerViewSelectionDefaults integerForKey:@"picker1"] 
        inComponent:1 animated:YES];
}
  

Комментарии:

1. Не работает: (В журнале отображается тот же результат, даже если я выбираю из разных строк

2. Действительно? Внимательно посмотрите на различия в том, что я предложил, по сравнению с вашим исходным кодом. Обратите внимание, что в первой функции вы должны извлечь выбранную строку из правильного компонента. Затем создается ключ, значение которого специфично для компонента, например picker0. Во второй функции эти ключи явно используются для извлечения правильных значений. Итак, я не создавал и не запускал этот код, но все это выглядит довольно просто (для меня), поэтому, если сейчас есть проблема, я ее не вижу! 🙂 Вы прошли через этот код в отладчике?

3. Рад это слышать! Я думал, что это возможно. 🙂

Ответ №2:

Добавьте их с помощью отдельных ключей.

 - (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:   (NSInteger)component {    
NSInteger selectedRow = [thePickerView selectedRowInComponent:0];

[[NSUserDefaults standardUserDefaults] setInteger:selectedRow forKey:@"pickerRow1"];
[[NSUserDefaults standardUserDefaults] setInteger:selectedRow forKey:@"pickerRow2"];
}