편집 : iPad Retina 시뮬레이터 및 iPad Mini 3 테스트 장치에서 만 발생한다고 결정했습니다. 이러한 타겟에서 100 %의 시간이 발생하고 다른 iPad 또는 iPhone 시뮬레이터 (iPad Air/Air 2, iPad Pro, iPhone 5 - 7 Plus)에서는 절대로 발생하지 않습니다. 테스트를 위해 다른 장치가 없습니다.길게 누름시 EXC_BAD_ACCESS; 좀비 활동 없음
은 내가 각 셀 내부의 사용자 정의보기에 UILongPressGestureRecognizer
을 추가 한 UITableView
를 표시 스위프트로 작성된 응용 프로그램을 가지고있다. EXC_BAD_ACCESS (코드 = 1, 주소 = 0xd08600b6)
이 (주소는 격렬하게 변화 : 응용 프로그램은되는 응용 프로그램은
스레드 1 정지 포인트, 행에 I 때까지 긴 프레스를 잘 실행 꽤 무작위 적으로 보인다. 때때로 0x0이다.) 크래시가 발생하면 디버그 콘솔에 출력이 표시되지 않는다. Xcode 자체가 내 앱 대리인을위한 클래스 선언의 첫 번째 줄에 열립니다.
길어 누르기 이벤트 처리기 메서드의 첫 번째 줄에 중단 점을 넣었지만 중단 점에 도달하기 전에 응용 프로그램이 충돌합니다. 또한 예외 중단 점을 추가했지만 문제가 발생하지는 않습니다.
스키마에 좀비 개체를 사용할 수있게 설정했지만 아무 것도 나타나지 않습니다. Instruments 및 좀비 템플릿을 사용하여 앱을 실행 해 보았습니다. 앱이 멈추고 인 스트 루먼트는 좀비 활동을 신고하지 않습니다. XCode의 분석 보고서는 문제가 없습니다.
어떻게 관련이 있을지 모르겠지만이 문제는 처음으로 테스터에게 배포하기 위해 앱을 보관 한 이후 새로운 내용입니다. 그 전에 앱은 시뮬레이터와 테스트 장치에서 완벽하게 작동했습니다. 이 문제는 처음으로 장치에 배포 .ipa 파일을 설치하고 실행 한 첫 번째 문제를 나타 냈습니다. 그런 다음 시뮬레이터로 돌아가서 같은 동작을 발견했습니다. 나는 프로젝트를 청소하고, 빌드 폴더를 청소하고, 개발 기계를 재부팅하고, 내가 생각할 수있는 모든 것을 원시 상태로 돌릴 수있다. 차이 없음.
나는 이것을 추적하는 과정에서 어떻게 실패 했나. 어떤 제안이라도 대단히 감사하겠습니다.
추가 정보
충돌이
UILongPressGestureRecognizer
초기화에 전달 된#selector
개체 내에서 발생하는 것 같습니다.# @objc TikkunRowView에 objc_retain 0 0x006e7295()
1 0x0007529f : 여기서 디버그 탐색 창에서 호출 스택이다.onLongPress (발신자 : UILongPressGestureRecognizer, forEvent :의 UIEvent) ->()
# 2 0x01cc6d3b - [UIGestureRecognizerTarget _sendActionWithGestureRecognizer :()
# _UIGestureRecognizerSendTargetActions()
# 3 0x01ccf75e _UIGestureRecognizerSendActions 4 0x01cccdee()
에서 # 5 0x01ccbca8 - [UIGestureRecognizer _updateGestureWithEvent : buttonEvent :]그리고 여기에는 충돌이 발생 여기서, 상기 1의 코드()의
# 6 0x01cb6670 _UIGestureEnvironmentUpdate에()는합니다 (calll
은 01,238,703,954,282 오프셋42 >는) :Tikkun Sample`@objc TikkunRowView.onLongPress(sender : UILongPressGestureRecognizer, forEvent : UIEvent) ->(): 0x60270 <+0>: pushl %ebp 0x60271 <+1>: movl %esp, %ebp 0x60273 <+3>: pushl %esi 0x60274 <+4>: subl $0x24, %esp 0x60277 <+7>: movl 0x14(%ebp), %eax 0x6027a <+10>: movl 0x10(%ebp), %ecx 0x6027d <+13>: movl 0x8(%ebp), %edx 0x60280 <+16>: movl %ecx, (%esp) 0x60283 <+19>: movl %ecx, -0x8(%ebp) 0x60286 <+22>: movl %edx, -0xc(%ebp) 0x60289 <+25>: movl %eax, -0x10(%ebp) 0x6028c <+28>: calll 0x7c9ec ; symbol stub for: objc_retain 0x60291 <+33>: movl -0x10(%ebp), %ecx 0x60294 <+36>: movl %ecx, (%esp) 0x60297 <+39>: movl %eax, -0x14(%ebp) 0x6029a <+42>: calll 0x7c9ec ; symbol stub for: objc_retain >> 0x6029f <+47>: movl -0xc(%ebp), %ecx << CRASH HAPPENS WITH THIS LINE HIGHLIGHTED 0x602a2 <+50>: movl %ecx, (%esp) 0x602a5 <+53>: movl %eax, -0x18(%ebp) 0x602a8 <+56>: calll 0x7c9ec ; symbol stub for: objc_retain 0x602ad <+61>: movl -0x8(%ebp), %ecx 0x602b0 <+64>: movl %ecx, (%esp) 0x602b3 <+67>: movl -0x10(%ebp), %edx 0x602b6 <+70>: movl %edx, 0x4(%esp) 0x602ba <+74>: movl -0xc(%ebp), %esi 0x602bd <+77>: movl %esi, 0x8(%esp) 0x602c1 <+81>: movl %eax, -0x1c(%ebp) 0x602c4 <+84>: calll 0x5fd40 ; Tikkun_Sample.TikkunRowView.onLongPress (sender : __ObjC.UILongPressGestureRecognizer, forEvent : __ObjC.UIEvent) ->() at TikkunRowView.swift:128 0x602c9 <+89>: movl -0xc(%ebp), %eax 0x602cc <+92>: movl %eax, (%esp) 0x602cf <+95>: calll 0x7c9e6 ; symbol stub for: objc_release 0x602d4 <+100>: addl $0x24, %esp 0x602d7 <+103>: popl %esi 0x602d8 <+104>: popl %ebp 0x602d9 <+105>: retl
나는이 물건을 읽기에 전문가는 아니지만, 충돌 내 이벤트 처리기 메서드에 파견하도록되어 컴파일러가 생성 된 코드에서 일어나는 것 같습니다. 이 코드가 오프셋 (< +84 >)에서 호출하기 전에이 코드가 어떤 객체를 검사하는지 알 수 없습니다. 콘솔이 당신에게 자세한 오류 메시지를 제공하지 않은 이유
let g = UILongPressGestureRecognizer(target: self, action: #selector(TikkunRowView.onLongPress(sender:forEvent:)))
'1 단계 : 충돌을 일으키는 줄을 확인하십시오. '시뮬레이터에서 충돌이 발생하면 오류가 발생한 행에서 실행이 중지되어야합니다. 그렇지 않은 경우 예외 중단 점을 추가하십시오. 어떤 코드 실행이 중지되는지 나타내는 적절한 코드를 추가하십시오. '2 단계 : 사람들이 충돌 로그를 검토하게하십시오 :'관련된 상징적 인 충돌 로그를 추가하십시오. –
터미널을 점검하십시오. 아무것도 출력되지 않니? 일반적으로 오류 메시지가 표시됩니다. 또한 암시 적으로 빠른 옵션을 래핑하지 않는 것이 대부분의 문제의 원인입니다. –
@RoboticCat - Xcode는 실행 코드가 아닌 내 앱 대리인의 클래스 선언에서 멈 춥니 다. 콘솔에 크래시 로그가 없습니다. –