2014-10-20 1 views
0

UIAlertView의 하위 호환성을 해결하기 위해 iOS 버전 8 이하에서 작동하는 인터페이스가 출시되었습니다.완료 블록에서 메시지를 보내면 EXEC_BAD_ACCESS가 발생합니다.

그 외에도, 일단 앱이 시작되면 유휴 타이머를 관리하는 클래스는 거의 없습니다. 약 30 분의 유휴 시간이 완료되면 경고가 사용자에게 표시됩니다.

사용자 작업에 따라 응용 프로그램 대리인에 정의 된 적절한 메서드가 호출됩니다. "- (무효) showIdleAlert"충돌을 유발한다

Here 당신이 알 것 GitHub의 프로젝트 자체

내부 SPTimer.m에 요점

link에 대한 링크입니다.

NSZombieEnabled를 YES로 설정했습니다. 그러나 적절한 전화 추적은 없습니다.

디버거에서 'bt'를 실행하면 다음 오류가 발생합니다.

* thread #1: tid = 0x2c301d, 0x0000000101884017 libobjc.A.dylib`objc_msgSend + 23, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x18080100) 
    frame #0: 0x0000000101884017 libobjc.A.dylib`objc_msgSend + 23 
    * frame #1: 0x000000010133459c SessionTimer`__32-[UIAlertMode initAlertWith::::]_block_invoke10(.block_descriptor=0x00007f8fe2765280, action=0x00007f8fe2769c90) + 76 at UIAlertMode.m:55 
    frame #2: 0x0000000102216097 UIKit`-[UIAlertController _fireOffActionOnTargetIfValidForAction:] + 55 
    frame #3: 0x00000001022165d9 UIKit`__85-[UIAlertController _dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:]_block_invoke + 30 
    frame #4: 0x00000001020c179c UIKit`-[UIPresentationController transitionDidFinish:] + 1118 
    frame #5: 0x00000001020c3b17 UIKit`__56-[UIPresentationController runTransitionForCurrentState]_block_invoke_2 + 133 
    frame #6: 0x0000000102711ac3 UIKit`-[_UIViewControllerTransitionContext completeTransition:] + 110 
    frame #7: 0x00000001020319f3 UIKit`-[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 326 
    frame #8: 0x0000000102019d9a UIKit`-[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 209 
    frame #9: 0x000000010201a0d0 UIKit`-[UIViewAnimationState animationDidStop:finished:] + 76 
    frame #10: 0x00000001058a499e QuartzCore`CA::Layer::run_animation_callbacks(void*) + 308 
    frame #11: 0x00000001041177f4 libdispatch.dylib`_dispatch_client_callout + 8 
    frame #12: 0x0000000104100991 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 956 
    frame #13: 0x0000000101b3c569 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9 
    frame #14: 0x0000000101aff46b CoreFoundation`__CFRunLoopRun + 2043 
    frame #15: 0x0000000101afea06 CoreFoundation`CFRunLoopRunSpecific + 470 
    frame #16: 0x000000010519c9f0 GraphicsServices`GSEventRunModal + 161 
    frame #17: 0x0000000101fc0550 UIKit`UIApplicationMain + 1282 
    frame #18: 0x0000000101333e63 SessionTimer`main(argc=1, argv=0x00007fff5e8cf2c8) + 115 at main.m:14 
    frame #19: 0x000000010414c145 libdyld.dylib`start + 1 

나는 나의 디자인이 좋지 않다는 것을 인정하고 나는 근본적으로 잘못된 것을 할 수도있다. 피드백을 고맙게 생각합니다.

+0

내 질문에 답합니다. 분명히 내 블록을 assign 속성으로 참조하고 있었기 때문에 충돌을 복사하지 않았습니다. 다음은 원래 게시물에 대한 참조입니다. http://stackoverflow.com/questions/13812692/exc-bad-access-on-customised-blocks – amieka

답변

3

분명히 assign 속성으로 내 블록을 참조 했으므로 copy이 아니라 충돌이 발생했습니다. 다음은 원래 게시물에 대한 참조이며 응답은 EXC_BAD_ACCESS on customised blocks입니다.

감사합니다.