2011-04-08 6 views
1

은 다음 코드는 내가 확인하고 NSUserDefaults에 이름 2453 아무 키가없는 것을 발견충돌 가져 오는 NSUserDefaults

[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]; 

나를 위해 충돌된다. 처음에는이 응용 프로그램을 실행 중이므로 나중에이 키가 추가되지는 않습니다. 이 충돌을 무시하는 법.

+0

크래시 로그는 어떤 모양입니까? –

답변

0
[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]; 
//              ^^ ^

"키"는 -dictionaryForKey:must be an NSString입니다. int 일 수 없습니다. 따라서 입력 한 키는 숫자로만 구성 되더라도 @"..."을 사용하여 문자열을 전달해야합니다. 열쇠가 없다는 사실은 사고와 무관합니다.

+0

여기 내 글을 쓰는 실수 ... 그러나 코드에서는 NSString 만 전달합니다. – Abhinav

+0

@Abhinav : 그렇다면 크래시가 발생하지 않고'nil' 만 리턴하십시오. 오류 로그를 표시하십시오. – kennytm

+0

나는 그것을 얻었다 ... 나는 그 문자열을 서버에서 얻고 있었고 그것을 nil로 설정하고 있었다. 그래서 그것은 부서지기 시작했습니다. – Abhinav

0
if ([[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]) { 
    // this line will only be reached if there is something for @"2453" 
} 
2

이 줄

[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]; 

가 충돌하는 행을 경우이를 시도 할 수 있습니다 대신

NSDictionary *dict = nil; 
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"2453"] != nil) 
    dict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]; 

if (dict) { 
    ... 
} 

내 직감이 경우 dictionaryForKey가 뒤에서 objectForKey 호출이다 그리고 맹목적으로 당신을 위해 nilNSDictionary에 던지려고했다. 나는 생각한다. 그러나 그 열쇠에 대한 어떤 종류의 물체가 있는지 먼저 확인함으로써 충돌을 피할 수 있습니다. 소용돌이 치고 다시보고하십시오! :-)