2013-08-07 4 views
2

Итак, у меня есть двойной выборщик, где пользователь устанавливает каждое колесо в нужное место, а затем нажимает кнопку, которая отображает их выбор. Легко чист и прост, но я хочу сохранить эти данные позже, чтобы они не исчезли после закрытия приложения и снова его снова открыли. Теперь я знаю, как это сделать с помощью datePicker, но не с doublePicker. Итак, мой вопрос: как мне настроить мой код на сохранение и получение информации datePickers в doublePicker?iOS: Сохранение настроек двойного выбора (сохранение данных)

Вот мой код Datepicker:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

// Pulling the date out of my picker 
NSDate *selectedDate = [self.datePicker date]; 

[defaults setObject:selectedDate forKey:@"DatePickerViewController.selectedDate"]; 

А потом извлечения его снова:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Get the date. I'm going to use a little shorthand instead of creating 
    // a variable for the instance of `NSUserDefaults`. 
    NSDate *storedDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"DatePickerViewController.selectedDate"]; 

    // Setting the date on the date picker. I'm passing `NO` to `animated:` 
    // because I'm performing this before the view is on screen, but after 
    // it has been loaded. 
    [self.datePicker setDate:storedDate animated:NO]; 
} 

Любая помощь будет оценена, ТНХ :)

ответ

1

В вашей UIPickerViewDelegate:

 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    [defaults setInteger:row forKey:[NSString stringWithFormat:@"DoublePickerViewController.%i", component]]; 
} 

Чтобы получить данные из:

 for (int i = 0; i < doublePicker.numberOfComponents; i++) { 
     NSInteger *storedInteger = [[NSUserDefaults standardUserDefaults] integerForKey:[NSString stringWithFormat:@"DoublePickerViewController.%i", i]; 
[doublePicker selectRow:storedInteger inComponent:i animated:NO]; 
    } 

Для хранения нескольких значений:

В вашем UIPickerViewDelegate:

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

{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSArray *oldArray = [defaults arrayForKey:[NSString  stringWithFormat:@"DoublePickerViewController.%i", component]]; 

    //Make a mutable version so we can change it 
    NSMutableArray *newArray = [oldArray mutableCopy]; 
    if (!newArray) { 
     newArray = [NSMutableArray array]; 
    } 
    //Add The Latest Row To The end of the array. We wrap it in an NSNumber so it can be in an array 
    [newArray addObject:[NSNumber numberWithInteger:row]]; 

    //If you want to have a limit on the amount of values that can be stored then use this 
    int maxValues = 5; 
    if (newArray.count >= maxValues) { 
     //Remove the oldest object 
     [newArray removeObjectAtIndex:0]; 
    } 
    [defaults setObject:newArray forKey:[NSString  stringWithFormat:@"DoublePickerViewController.%i", component]]; 
} 

Чтобы получить данные из:

 for (int i = 0; i < doublePicker.numberOfComponents; i++) { 
     NSArray *storedIntegers = [[NSUserDefaults standardUserDefaults] arrayForKey: [NSString stringWithFormat:@"DoublePickerViewController.%i", i]; 
     //I don't know what values you want, but to get an int out of the array: 
     //int integer = [(NSNumber *)[storedIntegers objectAtIndex:0] intValue]; 
     //And to set the row for a component: 
     //[doublePicker selectRow:storedInteger inComponent:i animated:NO]; 
    } 
+0

спасибо для ответа, но у меня возникла проблема относительно того, где я ntegrate первый блок кода. Вы говорите, что помещаете его в UIPickerViewDelegate, вы имеете в виду мой файл делегата? Поскольку шляпа просто создает сотни ошибок, и я реализовал ее в методе buttonPressed, который пользователь нажимает, чтобы выбрать значения выбора, которые они установили, также дает мне массу ошибок. Так можете ли вы быть более конкретным, где вы его положили? И скажите мне, где поставить код в коробке два, пожалуйста? Большое спасибо :) – Sp3kk

+0

NVM, я получил его, чтобы работать бутон. Я положил его в UIPickerViewDelegate. под мой #pragma mark Picker Delegate Methods. А во втором кодовом окне просто отсутствовала правая скобка »]« Еще раз спасибо :) – Sp3kk

+0

Мне очень жаль всех спама, но я беспокоюсь о вашем методе. Он сохраняет текущие значения выбора очень хорошо, но когда я их изменяю, он удаляет старые значения и сохраняет новый раз на своем месте. Итак, есть ли способ сохранить первые значения, и если пользователь ставит новое значение, он сохраняет это также, не удаляя старые значения? Так что все, что пользователь ставит сборщиков, будет храниться и может быть возвращено, а не только самые возмущенные значения. Если вы можете мне помочь, это все, спасибо снова, как всегда: D – Sp3kk

Смежные вопросы