NSUserDefaults - хранение и получение данных - PullRequest
3 голосов
/ 26 сентября 2011

У меня есть некоторые данные, которые были сохранены с использованием NSUserDefaults в одном представлении, а затем отображаются в другом представлении.Проблема, с которой я столкнулся, заключается в том, что когда пользователь изменяет данные и затем возвращается к представлению, в котором отображаются данные (в UILabel), данные, которые были впервые сохранены, отображаются вместо нового сохраненного текста.

Я думаю, что мне нужно что-то сделать с viewDidAppear , возможно, чтобы каждый раз, когда представление отображалось, отображались новейшие сохраненные данные.

вот код, в котором я отображаю сохраненную информацию NSUserDefaultsUILabel:

   NSString *aValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"myTextFieldKey"];
    NSLog(@"Value from standardUserDefaults: %@", aValue);

    NSLog(@"Label: %@", myLabel);
    myLabel.text = aValue;

если бы кто-то мог указать мне правильное направление, это было бы здорово,

спасибо

Ответы [ 4 ]

11 голосов
/ 26 сентября 2011

Поместите этот текст в

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear: animated];
    NSString *aValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"myTextFieldKey"];
    NSLog(@"Value from standardUserDefaults: %@", aValue);

    NSLog(@"Label: %@", myLabel);
    myLabel.text = aValue;
}

И в вашем представлении "edit" в - viewWillDisappear: сохранить изменения в NSUserDefaults

3 голосов
/ 26 сентября 2011

При сохранении данных в NSUserDefaults, они не сразу записывают в постоянное хранилище.Когда вы сохраняете данные в NSUserDefaults, убедитесь, что вы вызываете:

[[NSUserDefaults standardUserDefaults] synchronize];

Таким образом, сохраненные значения будут немедленно записаны в хранилище, и каждое последующее чтение из UserDefaults приведет к обновленному значению.

3 голосов
/ 26 сентября 2011

Не забывайте использовать synchronize при установке какого-либо значения

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:YOUR_VALUE forKey:@"KEY_NAME"];
[defaults synchronize];

Теперь вы можете поместить свой код в метод viewWillAppear для извлечения значения из значений по умолчанию, это поможет вам получить значение, сохраненное в текущий момент для нужного вам ключа.

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString* strValue =    [defaults objectForKey:@"KEY_NAME"];
myLabel.text = strValue != nil ? strValue : @"No Value";

Надеюсь, это поможет

0 голосов
/ 11 сентября 2017

В Swift мы можем сделать это следующим образом:

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

 let defaults = UserDefaults.standard
 defaults.set(YOUR_VALUE, forKey: "YOUR_KEY_NAME")

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

 let defaults = UserDefaults.standard
 let data = defaults.objectForKey("YOUR_KEY_NAME")

Для более подробной информации посетите: https://www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-userdefaults

...