Objective c 从完成块发送消息会导致执行错误访问

Objective c 从完成块发送消息会导致执行错误访问,objective-c,objective-c-blocks,uialertcontroller,Objective C,Objective C Blocks,Uialertcontroller,为了解决UIAlertView的向后兼容性问题,我设计了一个似乎适用于iOS版本8及更低版本的界面 除此之外,我有几个类负责在应用程序启动后管理空闲计时器。空闲时间约30分钟后,将向用户显示警报 根据用户操作,调用应用程序委托中定义的适当方法 是指向要点的链接 以及github项目本身 在SPTimer.m内部,您会注意到“-(void)showidlearert”正在触发崩溃 我已将NSZombieEnabled设置为“是”。但是没有正确的呼叫跟踪 在调试器内运行“bt”时,会看到以下错误 *

为了解决
UIAlertView
的向后兼容性问题,我设计了一个似乎适用于iOS版本8及更低版本的界面

除此之外,我有几个类负责在应用程序启动后管理空闲计时器。空闲时间约30分钟后,将向用户显示警报

根据用户操作,调用应用程序委托中定义的适当方法

是指向要点的链接

以及github项目本身

在SPTimer.m内部,您会注意到“-(void)showidlearert”正在触发崩溃

我已将NSZombieEnabled设置为“是”。但是没有正确的呼叫跟踪

在调试器内运行“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

我承认我的设计不好,我可能在这里做了一些根本错误的事情。非常感谢您的反馈。

显然,我是将我的块作为
assign
属性引用的,而不是
copy
,因此崩溃了。这里是一个参考原始帖子的答案


谢谢

显然,我是将我的块引用为
assign
属性,而不是
copy
,因此崩溃了。这里是一个参考原始帖子的答案


谢谢

显然,我是将我的块引用为
assign
属性,而不是
copy
,因此崩溃了。这里是一个参考原始帖子的答案


谢谢

显然,我是将我的块引用为
assign
属性,而不是
copy
,因此崩溃了。这里是一个参考原始帖子的答案


谢谢你回答我自己的问题。显然,我是将我的块作为赋值属性引用,而不是复制,因此发生了崩溃。这里是一个参考原始的帖子,它回答了我自己的问题。显然,我是将我的块作为赋值属性引用,而不是复制,因此发生了崩溃。这里是一个参考原始的帖子,它回答了我自己的问题。显然,我是将我的块作为赋值属性引用,而不是复制,因此发生了崩溃。这里是一个参考原始的帖子,它回答了我自己的问题。显然,我是将我的块作为赋值属性引用,而不是复制,因此发生了崩溃。这里是一个参考原始帖子的答案