2011-02-23 8 views
0

iPhone 응용 프로그램에서 NSUserDefaults의 배열을로드하려고합니다.왜 NSUserDefaults에서 배열을로드 할 때 응용 프로그램이 충돌합니까?

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
self.myarray_1 = nil; 

하지만 다음 줄에 내 응용 프로그램 충돌 :이 코드와 함께 일을 설정

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[NSCFString count]: unrecognized selector sent to instance 0x796c710' 

가 어떻게이 문제를 해결할 수있는 오류가있는

self.myarray_1 = [[NSMutableArray alloc] 
        initWithArray: [defaults objectForKey:@"highscores"]]; 

?

+0

비욘 (Bjorn)이 지적한 것 외에도, 당신은 'self.myarray_1'에 대한 할당에서 NSArray를 유출하고 있습니다. 거기에 배열을 할당하지 말고 자동 배열 된 인스턴스를 다시 얻으려면'-arrayWithArray :'를 사용하십시오. 또한'myarray_1'는 표준 코코아 명명 규칙을 따르지 않습니다. 'highScoresArray' 또는'highScores'와 같은 것을 사용할 것을 제안 할 수 있습니까? –

답변

2

NSString의 인스턴스에 count 메시지가 수신되었지만 분명히 응답하지 않습니다 (즉, 그러한 메시지가 구현되지 않음)라는 오류 메시지가 표시됩니다. 대부분의 경우 메시지는 NSArray 인스턴스 용입니다.

@"highscores"의 기본값 인 NSArray 대신 실수로 NSString을 저장 했습니까? 어쩌면 이전 빌드 중 하나에 있습니까? 모든 사용자 기본값을 지우려면 시뮬레이터 나 장치에서 앱을 삭제하고 다시 설치하면됩니다.

0

self.myarray_1 = [[NSMutableArray alloc] initWithArray:(NSArray*)[defaults objectForKey:@"highscores"]]; 

시도하고 난 당신이 클래스의 proparty로 변수 myarray_1을 만들었습니다 확신합니다.

0

앱의 기본값은 배열이 아니라 문자열입니다. 코드의 다른 위치에있는 배열이 아닌 문자열을 기본값으로 설정하는 것이 좋습니다. 두 번째 매개 변수로 highscores 키를 사용하여 -[NSUserDefaults setObject:forKey:]이라고하는 위치를 찾으십시오. 어느 쪽이든 여전히 NSString을 첫 번째 인수로 전달하거나 어느 시점에 있었고 앱의 환경 설정에 여전히 설정되어 있습니다.

관련 문제