2015-01-30 4 views
0

저는 root viewcontroller에 풀어 놓은 여러 개의 viewcontroller가 있습니다. 대부분의 viewcontrollers에서는 unwind segue가 앱을 손상시키지 않고 잘 작동합니다. CLlocationmanager를 사용하는 viewcontroller만이 루트 viewcontroller에 대한 unwind segue를 수행 할 수 없습니다. 다음 코드는 내 코드의 차이를 만드는 줄입니다.위치 관리자로 인해 긴장을 풀고 난 후 충돌이 발생했습니다.

//Init the location Manager 
locationManager = [[CLLocationManager alloc] init]; 
[locationManager requestWhenInUseAuthorization]; 
locationManager.distanceFilter = kCLDistanceFilterNone; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
[locationManager startUpdatingLocation]; 
locationManager.delegate = self; 

내 코드의이 섹션에 설명을 추가하면 긴장을 풀 수 있습니다. 특히 마지막 줄이 차이를 만듭니다. 나는 푸는 전에 locationmanager를 풀려고했다. 때로는 효과가 있습니다. 때때로 그렇지 않습니다. 디버그 콘솔은 다음과 같이 말합니다 :

0x10bfe1005: movq (%rdi), %r11 
0x10bfe1008: movq %rsi, %r10 
0x10bfe100b: andl 0x18(%r11), %r10d<---Thread 1: EXC Bad_Access(code=1, adress=0x18) 
0x10bfe100f: shlq $0x4, %r10 
0x10bfe1013: addq 0x10(%r11), %r10 

무엇을 의미합니다. 나는 무엇을해야할지 모른다.

편집

이 종류의 작동이

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
[locationManager stopUpdatingLocation]; 
[locationManager release]; 
} 

을 추가 한 후. 나는 5 번 시도했다. 다음 다시 추락 :(정말 이상한.하지만 확실하지 않은 오류 메시지가 변경된 것 같습니다. "WebThread"(아래 참조) 말한다. 또한 대리자 메서드가있는 webview 있어요 .Webview 같이 공개하려고합니다. 잘.

libobjc.A.dylib`objc_msgSend: 
0x32f9af60: cbz r0, 0x32f9af9e   ; objc_msgSend + 62 
0x32f9af62: ldr.w r9, [r0] 
0x32f9af66: ldrh.w r12, [r9, #12] <-----WebThread(10):EXC_bad_access(code=1, address=0x100000c) 
0x32f9af6a: ldr.w r9, [r9, #8] 
0x32f9af6e: and.w r12, r12, r1 
0x32f9af72: add.w r9, r9, r12, lsl #3 

0x32f9af76: ldr.w r12, [r9] 
0x32f9af7a: teq.w r12, r1 
0x32f9af7e: bne 0x32f9af86    ; objc_msgSend + 38 
0x32f9af80: ldr.w r12, [r9, #4] 
0x32f9af84: bx  r12 
0x32f9af86: cmp.w r12, #0x1 
0x32f9af8a: blo 0x32f9af98    ; objc_msgSend + 56 
0x32f9af8c: it  eq 
0x32f9af8e: ldreq.w r9, [r9, #4] 
0x32f9af92: ldr r12, [r9, #8]! 
0x32f9af96: b  0x32f9af7a    ; objc_msgSend + 26 
0x32f9af98: ldr.w r9, [r0] 
0x32f9af9c: b  0x32f9b1e0    ; _objc_msgSend_uncached 
0x32f9af9e: mov.w r1, #0x0 
0x32f9afa2: bx  lr 
0x32f9afa4: nop  
0x32f9afa6: nop  
0x32f9afa8: nop  
0x32f9afaa: nop  
0x32f9afac: nop  
0x32f9afae: nop  
0x32f9afb0: nop  
0x32f9afb2: nop  
0x32f9afb4: nop  
0x32f9afb6: nop  
0x32f9afb8: nop  
0x32f9afba: nop  
0x32f9afbc: nop  
0x32f9afbe: nop  

EDIT2

좋아, 당신은 당신이 긴장을 풀고 전에 위치 관리자를 중지해야 위치 관리하고 작동 prepareforsegue 방법에서 웹보기를 해제 한 후.

+0

델리게이트를 nil로 설정해 보았습니까? 'locationManager.delegate = nil;'? – Fogmeister

+0

코드에서 충돌하는 부분을 찾으려면 예외 중단 점을 추가해야합니다. – Fogmeister

답변

1

.

unwinding 할 때 본질적으로 풀고있는 ViewController를 언로드하고 해제하고 있습니다.

그러나 위치 관리자의 위임 때문에 위치 관리자가 정보를 전달하려고합니다.

당신이이 문제를 해결 할 수 있어야합니다 ...

[locationManager stopUpdatingLocation]; 

당신이 긴장을 풀고 전에. (아마도 prepareForSegue 메소드에서).

+0

nope. (나는 stopupdatinglocation을 넣고 prepareforsegue에 위치 관리자를 릴리스했다. 여전히 충돌한다. – tyler

+0

@tyler hmm :(프로젝트에 예외 중단 점을 추가하고 충돌이 발생한 위치를 표시 할 수 있습니까?) 또한 나머지 스택을 표시 할 수 있습니다 자취. – Fogmeister