2011-09-26 1 views
3

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

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

вот код, который Im отображая NSUserDefaults хранится Информация на UILabel:

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

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

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

благодарит

+0

в какой метод вы написали этот код? – lukya

ответ

10

Помещенный это текст в документе

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

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

И в вашем «редактировании» вида - WillDisappear: сохранить изменения в NSUserDefaults

+0

это здорово. работал отлично. благодаря! – hanumanDev

3

Не забывайте использовать 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"; 

Надеется, что это помогает

3

При сохранении данных в NSUserDefaults, он не сразу написать в Persistent Storage. При сохранении данных в NSUserDefaults, убедитесь, что вы звоните:

[[NSUserDefaults standardUserDefaults] synchronize]; 

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

+1

Вторая часть второй части неверна. NSUserDefaults всегда читает из своего кеша в первую очередь. И если вы что-то сохраните, оно будет немедленно отправлено в кеш. Необходимость «синхронизации» после каждой записи в NSUserDefaults является урбанистическим мифом среди разработчиков iPhone. –

0

В 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

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

  • Нет связанных вопросов^_^