2

좋아요, 내 앱에 최고 점수 기능을 쓰려고합니다.Objective 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

initWithString의는 NSString 문서는 말합니다 :

매개 변수

aString

하는에서에 문자열 문자 복사. 이 값은 nil이 아니어야합니다.

objectForKey에 대한 문서 :

반환 값

지정된 키에 관련된 객체 또는 전무 키가 찾지 못한 경우 말했다.

아직 존재하지 않는 firstName을 검색하고 입력으로 NSString을 만들려고 할 때 문제가있는 것 같습니다.

+0

+1 좋은 분석. – gerry3

2

NSUserDefaults 인스턴스 메소드 registerDefaults:은이 용도로만 사용됩니다. 동일한 환경 설정 키에 설정된 다른 값으로 대체되는 환경 설정의 기본값을 설정할 수 있습니다. 기본 설정에 액세스해야하는 코드보다 먼저 실행되도록 조기에 호출해야합니다.