iOS: сохранение настроек выбора даты - PullRequest
0 голосов
/ 20 января 2012

Я очень плохо знаком с управлением памятью, и у меня есть вопрос, касающийся сохранения даты выбора даты. Это код, который я использую для сохранения введенного текста:

NSString *filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
    NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
    event1Field.text = [array objectAtIndex:0];
    event2Field.text = [array objectAtIndex:1];
}

Как бы я отредактировал это, чтобы сохранить дату выбора даты, а не введенный текст? И как мне отредактировать метод viewDidLoad? Я обычно просто вводю данные сборщика, например:

- (void)viewDidLoad {
    NSDate *now = [NSDate date];
    [datePicker setDate:now animated:YES];
}

Но я не уверен, как бы я мог загрузить его в сохраненное состояние. Извините, если это глупые вопросы, я все еще новичок и учусь на ходу.

Спасибо!

1 Ответ

3 голосов
/ 20 января 2012

Самый простой способ сохранить данные - это использовать NSUserDefaults, предоставляемый платформой Foundation.По сути, это просто хранилище значений ключей, которое позволяет сохранять небольшие объемы данных.

Прежде всего, сохранение данных из средства выбора даты выглядит примерно так:

// NSUserDefaults is a singleton instance and access to the store is provided 
// by the class method, +standardUserDefaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

// Let's pull the date out of our picker
NSDate *selectedDate = [self.datePicker date];

// Store the date object into the user defaults. The key argument expects a 
// string and should be unique. I usually prepend any key with the name 
// of the class it's being used in.
// Savvy programmers would pull this string out into a constant so that 
// it could be accessed from other classes if necessary.
[defaults setObject:selectedDate forKey:@"DatePickerViewController.selectedDate"];

Теперь, когдамы хотим извлечь эти данные и заполнить нашу программу выбора даты, мы могли бы сделать что-то вроде следующего ...

- (void)viewDidLoad
{
    [super viewDidLoad];

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

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