2014-10-20 3 views
0

Для обратной совместимости для UIAlertView Я придумал интерфейс, который, похоже, будет работать для версий 8 и ниже.Отправка сообщений из блоков завершения вызывает EXEC_BAD_ACCESS

В дополнение к этому у меня есть несколько классов, которые отвечают за управление таймером бездействия после запуска приложения. По завершении ~ 30 минут простоя пользователю отображается предупреждение.

На основании действий пользователя вызываются соответствующие методы, определенные в делегате приложения.

Here является ссылка на сутью

link и к самому GitHub проекта

Внутри SPTimer.m вы замечаете "- (Недействительными) showIdleAlert" является пусковым аварии.

Я установил 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

Отвечая на мой вопрос. По-видимому, я ссылался на свой блок как на свойство присваивания, а не на то, чтобы копировать его. Вот ссылка на исходное сообщение, на которое был дан ответ http://stackoverflow.com/questions/13812692/exc-bad-access-on-customized-blocks – amieka

ответ

3

По-видимому, я ссылался на свой блок как на объект assign, а не на copy, следовательно, сбой. Вот ссылка на исходное сообщение, на которое был дан ответ EXC_BAD_ACCESS on customised blocks.

Thanks

Смежные вопросы