如何解决弹出式视窗中的Segue解雇完成当机
我有一个客户在以下代码段上发生崩溃。我们没有运气来复制它,并且它在已发布的应用程序中运行已经好几年了,直到我们在TestFlight中分发了该Beta:
DispatchQueue.main.async(execute: {
if let _ = self.activeAlert {
self.activeAlert?.dismiss(animated: true,completion: {
// crashes here
self.performSegue(withIdentifier: "finished_calibration",sender: self)
})
} else {
self.performSegue(withIdentifier: "finished_calibration",sender: self)
}
})
这是堆栈跟踪
Last Exception Backtrace:
0 CoreFoundation 0x1bde8d344 __exceptionPreprocess + 228 (NSException.m:199)
1 libobjc.A.dylib 0x1bdba2cc0 objc_exception_throw + 60 (objc-exception.mm:565)
2 UIKitCore 0x1c194af8c -[UIViewController performSegueWithIdentifier:sender:] + 284 (UIViewController.m:3979)
3 iOSense 0x10016be68 partial apply for closure #1 in closure #4 in ODOCalGetDataViewController.catchNotification(notification:) + 48
4 iOSense 0x1001f24b4 thunk for @escaping @callee_guaranteed () -> () + 28 (<compiler-generated>:0)
5 UIKitCore 0x1c195bd10 -[UIViewController dismissViewControllerWithTransition:completion:] + 1276 (UIViewController.m:7909)
6 UIKitCore 0x1c195b720 -[UIViewController _performCoordinatedPresentOrDismiss:animated:] + 528 (UIViewController.m:7837)
7 UIKitCore 0x1c195df68 -[UIViewController dismissViewControllerAnimated:completion:] + 148 (UIViewController.m:8335)
8 iOSense 0x10016b334 closure #5 in ODOCalGetDataViewController.catchNotification(notification:) + 200 (ODOCalGetDataViewController.swift:108)
9 iOSense 0x1001f24b4 thunk for @escaping @callee_guaranteed () -> () + 28 (<compiler-generated>:0)
10 libdispatch.dylib 0x1bdb2e134 _dispatch_call_block_and_release + 32 (init.c:1408)
11 libdispatch.dylib 0x1bdb2f5ac _dispatch_client_callout + 20 (object.m:495)
12 libdispatch.dylib 0x1bdb3b7d4 _dispatch_main_queue_callback_4CF + 832 (inline_internal.h:2484)
13 CoreFoundation 0x1bde088d4 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CFRunLoop.c:1749)
14 CoreFoundation 0x1bde0358c __CFRunLoopRun + 1692 (CFRunLoop.c:3069)
15 CoreFoundation 0x1bde02bc8 CFRunLoopRunSpecific + 480 (CFRunLoop.c:3192)
16 GraphicsServices 0x1c81eb5cc GSEventRunModal + 164 (GSEvent.c:2246)
17 UIKitCore 0x1c1fb5744 UIApplicationMain + 1936 (UIApplication.m:4823)
18 iOSense 0x100120114 main + 68 (ISenseApplication.swift:13)
19 libdyld.dylib 0x1bdc7f384 start + 4
解决方法
8 iOSense 0x10016b334 closure #5 in ODOCalGetDataViewController.catchNotification(notification:) + 200 (ODOCalGetDataViewController.swift:108)
堆栈跟踪中的 框架8 显示执行是通过触发通知启动的。您能否确定在执行segue之前已从UIViewController
加载了负责呈现activeAlert
的{{1}}实例?
为此,您可以在调用Storyboard
之前添加健全性检查以确保storyboard
属性不是nil
。
performSegue(withIdentifier:sender:)
performSegue(withIdentifier:sender:)的Apple文档说
当前视图控制器必须已从情节提要中加载。如果它的故事板属性为nil,则可能是因为您自己分配并初始化了视图控制器,所以此方法将引发异常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。