2013-01-03 3 views
0

버전 10.6에서 실행되도록 앱을 만들려고하지만 EXC_BAD_ACCESS 예외가 발생하면 내가 최신 버전을 가지고있는 컴퓨터에서 실행할 때, 잘 돌아 간다. 그러나 어떤 이유로 든 7 이하 버전에서는 작동하지 않을 것이다. 10.6에서 컴퓨터를 개발하지 않았기 때문에 내가보아야 할 것은 충돌 로그이다. :EXC_BAD_ACCESS on only 10.6.8

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000 
Crashed Thread: 0 Dispatch queue: com.apple.main-thread 

Thread 0 Crashed: Dispatch queue: com.apple.main-thread 
0 com.apple.CoreFoundation  0x00007fff87604930 CFDictionaryGetValue + 96 
1 com.apple.CFNetwork    0x00007fff810814d9 CFHTTPCookieCreateWithProperties +   111 
2 com.apple.Foundation   0x00007fff88812f4c -[NSHTTPCookie initWithProperties:]  + 29 
3 com.apple.Foundation   0x00007fff88813243 +[NSHTTPCookie  cookieWithProperties:] + 50 

이것은 오류 로그의 주요 부분입니다. 그것은 사전 값을 얻으려고 충돌하는 것 같지만 정확히 어떻게 읽을 수 있는지 아니에요.

+1

해당 호출 스택을 읽으려면 맨 아래부터 시작하십시오. 어떤 타입의 NSHTTPCookie 호출을하고있는 것으로 보입니다. 'CFDictionaryGetValue' 호출은 다음 호출에서 스택에 대해 수행되는'CFHTTPCookieCreateWithProperties' 호출에서 만들어집니다. 어딘가에 (아마 스택을 낮춘다.), 당신은 ARC가 아닌 표준을 따르지 않을 수도있는 호출을하고있다. 왜냐하면 낮은 OSX 버전은 ARC를 구현하지 않기 때문이다. 이것은 단지 추측입니다. 부적절하게 보관 된 객체에서 메소드를 호출하는지 확인하십시오. –

+0

감사합니다. 내가 알아서 알려 드리겠습니다. – bstewart

답변

2

그래, 해결할 수있었습니다. 다음과 같은 방법으로 처음에 쿠키를로드했습니다.

- (NSHTTPCookie *)loadCookie { 
    NSDictionary *properties = [[NSUserDefaults standardUserDefaults] dictionaryForKey:kDefCookie]; 
    return [NSHTTPCookie cookieWithProperties:properties[COOKIE_KEY]]; 
} 

쿠키 속성을 기본값으로 저장 했으므로 세션간에 사용자 쿠키를 저장할 수있었습니다. 최신 버전에서 실행되는이 메서드는 기본값에 저장된 쿠키가없는 경우 나를 위해 nil을 반환했습니다. 웬일인지 이것이 10.6에서 작동하지 않는 것 같습니다. 나는이 방법을 바꾸었고 완벽하게 작동합니다.

- (NSHTTPCookie *)loadCookie { 
    NSDictionary *properties = [[NSUserDefaults standardUserDefaults] dictionaryForKey:kDefCookie]; 
    if (properties) 
     return [NSHTTPCookie cookieWithProperties:properties[COOKIE_KEY]]; 
    else return nil; 
} 

감사합니다. 카터 파페가 내게 오류 로그를 읽도록 도와주었습니다. cfDictionary 부분에 많은 관심을 기울 였고 전에 읽은 내용을 읽지 않았습니다.