Цель C - проблема с objectForKey - PullRequest
       18

Цель C - проблема с objectForKey

2 голосов
/ 12 февраля 2010

Хорошо, я пытаюсь написать для моего приложения функцию высокой оценки.

Моя проблема в том, что, когда еще не сохранен рекорд, моя программа падает.

Если я сохраню его с:

[[NSUserDefaults standardUserDefaults] setObject:@"[given string]" forKey:@"firstName"];

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

first = [[NSString alloc] initWithString:[[NSUserDefaults standardUserDefaults] objectForKey:@"firstName"]];

плохие вещи случаются.

В принципе, можно ли посмотреть, нет ли еще что-нибудь под firstName? Есть ли способ инициализации без удаления имени, которое уже может присутствовать?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 12 февраля 2010

Документация NSString для initWithString: говорит

Параметры

aString

Строка, из которой копируются символы. Это значение не должно быть равно нулю.

Документация для objectForKey: говорит

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

Объект, связанный с указанный ключ, или ноль, если ключ был не найден.

Кажется, проблема в том, что возвращается ноль, когда вы пытаетесь получить firstName, который еще не существует, и пытаетесь создать строку NSString с ним в качестве входных данных.

2 голосов
/ 12 февраля 2010

Метод экземпляра NSUserDefaults registerDefaults: предназначен именно для этой цели: вы можете установить значения по умолчанию для ваших предпочтений, которые будут переопределены любым другим значением, установленным для того же ключа предпочтения. Просто убедитесь, что он вызывается достаточно рано, чтобы он запускался перед любым кодом, который требует доступа к вашим настройкам.

1 голос
/ 12 февраля 2010

Вы можете загрузить «первый» так:

first = [[[NSUserDefaults standardUserDefaults] objectForKey:@"firstName"] retain];
if (!first) {
    // set default or do something else if there wasn't a value saved
    first = @"N/A";
}
...