2

Хорошо, я пытаюсь написать функцию высокого балла для моего приложения.Цель C - Проблема с objectForKey

Моя проблема заключается в том, что, когда никакой высокий балл не был сохранен, моя программа вылетает.

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

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

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

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

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

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

Спасибо.

ответ

1

Вы можете загрузить "первый", как это:

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

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

Параметры

aString

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

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

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

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

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

+0

+1 Хороший анализ. – gerry3

2

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

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