UITapGestureRecognizer를 사용하여 (수직으로) 탭을 확장하고 UIPanGestureRecoginizer를 사용하여 팬의 API 호출을 시작하는 MKMapView가 있습니다. 모든 것이 잘 작동했다 다시 약간의 시간이 될 때까지, 어디 패닝에 앱이 (내가 이해할 수 또는 정보) 거의 유용한 정보MKMapView setRegion : 애니메이션 : 응용 프로그램이 충돌 함 (편집 됨)
예외 중단 점에, 그리고 좀비 오브젝트가되었습니다로 충돌 할
사용하도록 설정되었습니다. 충돌시에는 예외 중단 점에 절대 도달하지 않습니다!
다음은 로그입니다. (패닝 시작, 패닝, 패닝 종료가 팬 제스처 인식기 상태에 따라 인쇄 됨). 패닝이 끝나면 바로 앱이 다운됩니다. (지도는 모든 타일을로드 아직, 그리고 regionDidChangeAnimated 아직 호출되지 않습니다) : 여기
2013-01-17 14:46:04.396 MyApp[13126:c07] Panning Began
2013-01-17 14:46:04.412 MyApp[13126:c07] Panning
2013-01-17 14:46:04.412 MyApp[13126:c07] Panning
2013-01-17 14:46:04.557 MyApp[13126:c07] Panning
2013-01-17 14:46:04.606 MyApp[13126:c07] Panning
2013-01-17 14:46:04.691 MyApp[13126:c07] Panning Ended
2013-01-17 14:46:04.692 MyApp[13126:c07] *** -[MKMapViewPositioningChange hasChanges]: message sent to deallocated instance 0x139f7520
내가 충돌 후 볼 수있는 역 추적입니다 :
(lldb) bt
* thread #1: tid = 0x1c03, 0x02a4fa97 CoreFoundation`___forwarding___ + 295, stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
frame #0: 0x02a4fa97 CoreFoundation`___forwarding___ + 295
frame #1: 0x02a4f94e CoreFoundation`_CF_forwarding_prep_0 + 14
frame #2: 0x01244d27 MapKit`-[MKMapView(UserPositioningInternal) _runPositioningChange] + 2037
frame #3: 0x01242dd7 MapKit`-[MKMapView(UserPositioningInternal) _runPositioningChangeIfNeeded:] + 86
frame #4: 0x01240220 MapKit`-[MKMapViewInternal runPositioningChangeIfNeeded] + 50
frame #5: 0x01e2eb90 Foundation`__NSFireTimer + 97
frame #6: 0x02a1f376 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22
frame #7: 0x02a1ee06 CoreFoundation`__CFRunLoopDoTimer + 534
frame #8: 0x02a06a82 CoreFoundation`__CFRunLoopRun + 1810
frame #9: 0x02a05f44 CoreFoundation`CFRunLoopRunSpecific + 276
frame #10: 0x02a05e1b CoreFoundation`CFRunLoopRunInMode + 123
frame #11: 0x03c897e3 GraphicsServices`GSEventRunModal + 88
frame #12: 0x03c89668 GraphicsServices`GSEventRun + 104
frame #13: 0x0132d65c UIKit`UIApplicationMain + 1211
frame #14: 0x0001223d MyApp`main + 141 at main.m:16
frame #15: 0x00002fc5 MyApp`start + 53
은 충돌 순간 멀리 내가 갈 PanGestureRecognizer 액션 메소드에 대한 연결을 만듭니다.
제스처 인식기를 사용하는 중에이 충돌을 제거 할 수있는 방법이 있습니까? 또는 GestureRecognizers를 사용하지 않고지도가 탭되고 패닝되었음을 알 수있는 방법이 있습니까?
도움/질문/답변/의견 감사합니다!
업데이트 (1 월 19 일) : 팬 제스처 인식기에서 전혀 문제가되지 않는 것 같습니다. 이제 mapview에 새로운 주석을 추가하려고 시도한 후 충돌이 발생합니다. [MapView setRegion : animated :]를 호출하고 regionDidChangeAnimated가 충돌하기 직전에 충돌합니다. [MKMapViewPositioningChange hasChanges]와 동일한 충돌이 발생한 시점에서 로그가 기록됩니다. .
업데이트 (1 월 23 일) : 무슨 일이 일어 났는지 나는 확신합니다. MKMapView의 보이는 사각형에 모든 주석을 포함하도록 영역을 설정하려고하는 코드와 [myMapView removeAnnotations : [myMapView annotations]]를 호출하는 몇 개의 다른 위치가 있습니다. 그리고 내 생각에이 두 가지 행동은 심한 공중 충돌로 끝나며 충돌로 이어지는 흔적을 남기지 않습니다. 내가 직감이 고침을 통과하면 대답이 업데이트됩니다. QA