Сбой NSUserDefaults и не получение данных - PullRequest
0 голосов
/ 27 февраля 2012

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

В моем делегате приложения я установил значение 0 для ключа TopScoreLevel1. Позже в приложении я запускаю этот фрагмент кода:

        NSLog(@"This is your new score: %@", newScoreString);
        [[NSUserDefaults standardUserDefaults] setObject:@"xxx" forKey:@"TopScoreLevel1"];
        BOOL fail = [[NSUserDefaults standardUserDefaults] synchronize];

        if (!fail){
            NSLog(@"success.");
        } else {
            NSLog(@"fail.");
        }

        NSString *printRecorded = [[NSUserDefaults standardUserDefaults] stringForKey:@"TopScoreLeve1"];
        NSLog(@"Class: User Score. DID USER DEFAULTS SAVE? --> %@", printRecorded);

Новая оценка успешно печатает значение, но мой метод синхронизации не работает. Я также получаю значение (null) для printRecorded. Bizarre. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 27 февраля 2012

Когда вы устанавливаете значение, вы используете клавишу @"TopScoreLevel1".Когда вы получаете его, вы используете @"TopScoreLeve1" - не указывайте L перед 1. Поменяйте одно из них, чтобы оно соответствовало другому, и вы должны увидеть правильное поведение.

1 голос
/ 27 февраля 2012

Из документов:

- (BOOL)synchronize

Возвращаемое значение

ДА, если данные были успешно сохранены на диск, в противном случае НЕТ.

Попробуйте:

BOOL status = [[NSUserDefaults standardUserDefaults] synchronize];

if (status == YES){
    NSLog(@"success.");
} else {
    NSLog(@"fail.");
}

Негативная логика сложнее, а двойной негатив действительно сложен, поэтому
!fail
это намного сложнее понять, чем
status = YES

Но тогда ясность в коде не таковавсе.: -)

1 голос
/ 27 февраля 2012

вы сохраняете объект в NSUserDefaults, и после этого вы получаете stringForKey, поэтому сначала используйте setString:forKey, а затем попытайтесь решить проблему или нет?

и вы также получаете значение @"TopScoreLeve1", где сохраняете значение в @"TopScoreLevel1", исправьте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...