在我们的制作应用程序中,我们有关于从模态呈现的`ViewController中呈现ViewController
的崩溃报告。
我们有BackgroundForegroundDelegate
。每当应用进入后台时,它都会在当前ViewController
之上显示一个锁屏。
的AppDelegate:
func applicationDidEnterBackground(_ application: UIApplication) {
backgroundForegroundDelegate?.applicationDidEnterBackground()
}
func applicationWillEnterForeground(_ application: UIApplication) {
backgroundForegroundDelegate?.applicationWillEnterForeground()
}
LockScreenViewController:
class LockScreenViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let blurEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
blurEffectView.frame = self.view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)
view.sendSubview(toBack: blurEffectView)
}
}
TabBarController
,即backgroundForegroundDelegate,将执行以下操作以显示该LockScreen:
lazy var lockScreenViewController = UIStoryboard(name: "Login", bundle: nil).instantiateViewController(withIdentifier: "LockScreenViewController")
func applicationDidEnterBackground() {
let visibleViewController = (self.selectedViewController as? UINavigationController)?.visibleViewController
(visibleViewController as? BackgroundForegroundDelegate)?.applicationDidEnterBackground()
lockScreenViewController.modalPresentationStyle = .overFullScreen
let window = UIApplication.shared.keyWindow!
if let modalVC = window.rootViewController?.presentedViewController {
// HERE it does crash
modalVC.present(lockScreenViewController, animated: false,
completion: nil)
} else {
window.rootViewController!.present(lockScreenViewController, animated: false, completion: nil)
}
}
我标记了发生崩溃的行。
我们无法在具有相同操作系统的同一部手机上重现它。
这里可能出现什么问题,我们怎样才能做到这一点"安全"?
崩溃报告:
Hardware Model: iPhone8,1
Process: MyApp [13594]
Path: /private/var/containers/Bundle/Application/**/MyApp.app/MyApp
Identifier: *hidden*
Version: 1565 (1.2.0)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: *hidden*
Date/Time: 2017-09-24 14:46:10.5972 +0200
Launch Time: 2017-09-24 14:43:55.8968 +0200
OS Version: iPhone OS 11.0 (15A372)
Baseband Version: 4.00.01
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0
Last Exception Backtrace:
0 CoreFoundation 0x18261fd38 __exceptionPreprocess + 124 (NSException.m:166)
1 libobjc.A.dylib 0x181b34528 objc_exception_throw + 56 (objc-exception.mm:521)
2 UIKit 0x18bda189c -[UIViewController _presentViewController:withAnimationController:completion:] + 4828 (UIViewController.m:6945)
3 UIKit 0x18bda4074 __63-[UIViewController _presentViewController:animated:completion:]_block_invoke_2 + 68 (UIViewController.m:7453)
4 UIKit 0x18ba3ca84 +[UIView(Animation) performWithoutAnimation:] + 104 (UIView.m:11718)
5 UIKit 0x18bda3fc8 __63-[UIViewController _presentViewController:animated:completion:]_block_invoke + 220 (UIViewController.m:7451)
6 UIKit 0x18bda4488 -[UIViewController _performCoordinatedPresentOrDismiss:animated:] + 528 (UIViewController.m:7531)
7 UIKit 0x18bda3ea4 -[UIViewController _presentViewController:animated:completion:] + 188 (UIViewController.m:7462)
8 UIKit 0x18bb0e55c -[UIViewController presentViewController:animated:completion:] + 160 (UIViewController.m:7475)
9 MyApp 0x1041794cc _T013MyApp24TabBarControllerC29applicationDidEnterBackgroundyyF + 472 (TabBarController.swift:81)
10 MyApp 0x10417ace8 _T013MyApp24TabBarControllerCAA28BackgroundForegroundDelegateA2aDP019applicationDidEnterG0yyFTW + 20 (TabBarController.swift:0)
11 MyApp 0x104151aa0 _T013MyApp11AppDelegateC29applicationDidEnterBackgroundySo13UIApplicationCFTo + 192 (AppDelegate.swift:76)
12 UIKit 0x18bc9b648 __47-[UIApplication _applicationDidEnterBackground]_block_invoke + 180 (UIApplication.m:6096)
13 UIKit 0x18bd9e338 +[UIViewController _performWithoutDeferringTransitions:] + 128 (UIViewController.m:6538)
14 UIKit 0x18bc9b538 -[UIApplication _applicationDidEnterBackground] + 104 (UIApplication.m:6088)
15 UIKit 0x18bf2531c -[__UICanvasLifecycleMonitor_Compatability deactivateEventsOnly:withContext:forceExit:completion:] + 860 (_UICanvasLifecycleMonitor.m:375)
16 UIKit 0x18c68d760 __82-[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:]_block_invoke + 380 (_UIApplicationCanvas.m:0)
17 UIKit 0x18c68d58c -[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:] + 448 (_UIApplicationCanvas.m:156)
18 UIKit 0x18c4099c0 __125-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:]_block_invoke + 220 (_UICanvasLifecycleSettingsDiffAction.m:210)
19 UIKit 0x18c59efc8 _performActionsWithDelayForTransitionContext + 112 (_UICanvasSettingsDiffAction.m:34)
20 UIKit 0x18c409870 -[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 252 (_UICanvasLifecycleSettingsDiffAction.m:181)
21 UIKit 0x18c1f3850 -[_UICanvas scene:didUpdateWithDiff:transitionContext:completion:] + 364 (_UICanvas.m:517)
22 UIKit 0x18c098bd8 -[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:] + 468 (UIApplicationSceneClientAgent.m:77)
23 FrontBoardServices 0x184cc221c __80-[FBSSceneImpl updater:didUpdateSettings:withDiff:transitionContext:completion:]_block_invoke.362 + 212 (FBSSceneImpl.m:571)
24 libdispatch.dylib 0x181fa5048 _dispatch_client_callout + 16 (object.m:502)
25 libdispatch.dylib 0x181fac6c8 _dispatch_block_invoke_direct$VARIANT$mp + 288 (queue.c:3025)
26 FrontBoardServices 0x184cf5a04 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 36 (FBSSerialQueue.m:164)
27 FrontBoardServices 0x184cf56a8 -[FBSSerialQueue _performNext] + 404 (FBSSerialQueue.m:196)
28 FrontBoardServices 0x184cf5c44 -[FBSSerialQueue _performNextFromRunLoopSource] + 56 (FBSSerialQueue.m:232)
29 CoreFoundation 0x1825c8358 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24 (CFRunLoop.c:1982)
30 CoreFoundation 0x1825c82d8 __CFRunLoopDoSource0 + 88 (CFRunLoop.c:2017)
31 CoreFoundation 0x1825c7b60 __CFRunLoopDoSources0 + 204 (CFRunLoop.c:2053)
32 CoreFoundation 0x1825c5738 __CFRunLoopRun + 1048 (CFRunLoop.c:2920)
33 CoreFoundation 0x1824e62d8 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3245)
34 GraphicsServices 0x184377f84 GSEventRunModal + 100 (GSEvent.c:2245)
35 UIKit 0x18ba92880 UIApplicationMain + 208 (UIApplication.m:3948)
36 MyApp 0x1040c100c main + 56 (ContactsService.swift:16)
37 libdyld.dylib 0x18200a56c start + 4
Thread 0 name:
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x0000000182139348 __pthread_kill + 8
1 libsystem_pthread.dylib 0x000000018224d354 pthread_kill$VARIANT$mp + 396 (pthread.c:1484)
2 libsystem_c.dylib 0x00000001820a8fd8 abort + 140 (abort.c:91)
3 libc++abi.dylib 0x0000000181b0c068 abort_message + 132 (abort_message.cpp:75)
4 libc++abi.dylib 0x0000000181b0c210 default_terminate_handler() + 304 (cxa_default_handlers.cpp:68)
5 libobjc.A.dylib 0x0000000181b34810 _objc_terminate() + 124 (objc-exception.mm:657)
6 libc++abi.dylib 0x0000000181b2454c std::__terminate(void (*)()) + 16 (cxa_handlers.cpp:66)
7 libc++abi.dylib 0x0000000181b245b8 std::terminate() + 60 (cxa_handlers.cpp:97)
8 libdispatch.dylib 0x0000000181fa505c _dispatch_client_callout + 36 (object.m:505)
9 libdispatch.dylib 0x0000000181fac6c8 _dispatch_block_invoke_direct$VARIANT$mp + 288 (queue.c:3025)
10 FrontBoardServices 0x0000000184cf5a04 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 36 (FBSSerialQueue.m:164)
11 FrontBoardServices 0x0000000184cf56a8 -[FBSSerialQueue _performNext] + 404 (FBSSerialQueue.m:196)
12 FrontBoardServices 0x0000000184cf5c44 -[FBSSerialQueue _performNextFromRunLoopSource] + 56 (FBSSerialQueue.m:232)
13 CoreFoundation 0x00000001825c8358 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24 (CFRunLoop.c:1982)
14 CoreFoundation 0x00000001825c82d8 __CFRunLoopDoSource0 + 88 (CFRunLoop.c:2017)
15 CoreFoundation 0x00000001825c7b60 __CFRunLoopDoSources0 + 204 (CFRunLoop.c:2053)
16 CoreFoundation 0x00000001825c5738 __CFRunLoopRun + 1048 (CFRunLoop.c:2920)
17 CoreFoundation 0x00000001824e62d8 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3245)
18 GraphicsServices 0x0000000184377f84 GSEventRunModal + 100 (GSEvent.c:2245)
19 UIKit 0x000000018ba92880 UIApplicationMain + 208 (UIApplication.m:3948)
20 MyApp 0x00000001040c100c main + 56 (ContactsService.swift:16)
21 libdyld.dylib 0x000000018200a56c start + 4
Thread 1 name:
Thread 1:
0 libsystem_kernel.dylib 0x0000000182118bc4 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x0000000182118a3c mach_msg + 72 (mach_msg.c:103)
2 CoreFoundation 0x00000001825c7ce4 __CFRunLoopServiceMachPort + 196 (CFRunLoop.c:2613)
3 CoreFoundation 0x00000001825c58b0 __CFRunLoopRun + 1424 (CFRunLoop.c:2969)
4 CoreFoundation 0x00000001824e62d8 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3245)
5 Foundation 0x0000000182f0e6e4 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304 (NSRunLoop.m:367)
6 Foundation 0x0000000182f2dafc -[NSRunLoop(NSRunLoop) runUntilDate:] + 96 (NSRunLoop.m:411)
7 UIKit 0x000000018c5de02c -[UIEventFetcher threadMain] + 136 (UIEventFetcher.m:422)
8 Foundation 0x000000018300f860 __NSThread__start__ + 996 (NSThread.m:1181)
9 libsystem_pthread.dylib 0x000000018224c32c _pthread_body + 308 (pthread.c:740)
10 libsystem_pthread.dylib 0x000000018224c1f8 _pthread_start + 312 (pthread.c:799)
11 libsystem_pthread.dylib 0x000000018224ac38 thread_start + 4
Thread 2 name:
Thread 2:
0 libsystem_kernel.dylib 0x0000000182118bc4 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x0000000182118a3c mach_msg + 72 (mach_msg.c:103)
2 CoreFoundation 0x00000001825c7ce4 __CFRunLoopServiceMachPort + 196 (CFRunLoop.c:2613)
3 CoreFoundation 0x00000001825c58b0 __CFRunLoopRun + 1424 (CFRunLoop.c:2969)
4 CoreFoundation 0x00000001824e62d8 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3245)
5 Foundation 0x0000000182f0e6e4 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304 (NSRunLoop.m:367)
6 Foundation 0x0000000182f6062c -[NSRunLoop(NSRunLoop) run] + 88 (NSRunLoop.m:389)
7 MyApp 0x00000001041c7330 +[GAI threadMain:] + 64 (GAI.m:228)
8 Foundation 0x000000018300f860 __NSThread__start__ + 996 (NSThread.m:1181)
9 libsystem_pthread.dylib 0x000000018224c32c _pthread_body + 308 (pthread.c:740)
10 libsystem_pthread.dylib 0x000000018224c1f8 _pthread_start + 312 (pthread.c:799)
11 libsystem_pthread.dylib 0x000000018224ac38 thread_start + 4
Thread 3:
0 libsystem_kernel.dylib 0x0000000182139dbc __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x000000018224afb0 _pthread_wqthread + 884 (pthread.c:0)
2 libsystem_pthread.dylib 0x000000018224ac30 start_wqthread + 4
Thread 4:
0 libsystem_pthread.dylib 0x000000018224ac2c start_wqthread + 0 (pthread.c:2447)
Thread 5:
0 libsystem_pthread.dylib 0x000000018224ac2c start_wqthread + 0 (pthread.c:2447)
Thread 6 name:
Thread 6:
0 libsystem_kernel.dylib 0x0000000182118bc4 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x0000000182118a3c mach_msg + 72 (mach_msg.c:103)
2 libdispatch.dylib 0x0000000181fbacf4 _dispatch_mach_send_and_wait_for_reply + 644 (mach.c:831)
3 libdispatch.dylib 0x0000000181fbb19c dispatch_mach_send_with_result_and_wait_for_reply$VARIANT$mp + 56 (mach.c:1958)
4 libxpc.dylib 0x00000001822879cc xpc_connection_send_message_with_reply_sync + 196 (connection.c:802)
5 BaseBoard 0x0000000184aed634 -[BSXPCMessage sendSynchronouslyToConnection:error:] + 76 (BSXPCMessage.m:189)
6 BaseBoard 0x0000000184ae9dac -[BSBaseXPCClient _sendMessage:withReplyHandler:waitForReply:waitDuration:] + 320 (BSBaseXPCClient.m:233)
7 AssertionServices 0x0000000184b3cc10 -[BKSAssertionClientMultiplexer sendEvent:withAssertionType:forEventType:responseHandler:] + 272 (BKSAssertionClientMultiplexer.m:87)
8 AssertionServices 0x0000000184b36a98 -[BKSProcessAssertionClient sendCreateEvent:error:] + 116 (BKSProcessAssertionClient.m:53)
9 AssertionServices 0x0000000184b3a4c8 -[BKSAssertion _clientQueue_acquireAssertion] + 136 (BKSAssertion.m:293)
10 AssertionServices 0x0000000184b3a0fc __45-[BKSAssertion _registerAssertionAndAcquire:]_block_invoke + 80 (BKSAssertion.m:235)
11 libdispatch.dylib 0x0000000181fa5088 _dispatch_call_block_and_release + 24 (init.c:994)
12 libdispatch.dylib 0x0000000181fa5048 _dispatch_client_callout + 16 (object.m:502)
13 libdispatch.dylib 0x0000000181faee48 _dispatch_queue_serial_drain$VARIANT$mp + 528 (inline_internal.h:2500)
14 libdispatch.dylib 0x0000000181faf7d8 _dispatch_queue_invoke$VARIANT$mp + 340 (queue.c:5302)
15 libdispatch.dylib 0x0000000181fb0200 _dispatch_root_queue_drain_deferred_wlh$VARIANT$mp + 400 (queue.c:5920)
16 libdispatch.dylib 0x0000000181fb84a0 _dispatch_workloop_worker_thread$VARIANT$mp + 644 (source.c:2515)
17 libsystem_pthread.dylib 0x000000018224afe0 _pthread_wqthread + 932 (pthread.c:2207)
18 libsystem_pthread.dylib 0x000000018224ac30 start_wqthread + 4
Thread 7:
0 libsystem_pthread.dylib 0x000000018224ac2c start_wqthread + 0 (pthread.c:2447)
Thread 8 name:
Thread 8:
0 libsystem_kernel.dylib 0x0000000182118bc4 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x0000000182118a3c mach_msg + 72 (mach_msg.c:103)
2 CoreFoundation 0x00000001825c7ce4 __CFRunLoopServiceMachPort + 196 (CFRunLoop.c:2613)
3 CoreFoundation 0x00000001825c58b0 __CFRunLoopRun + 1424 (CFRunLoop.c:2969)
4 CoreFoundation 0x00000001824e62d8 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3245)
5 CFNetwork 0x0000000182c4fb40 +[NSURLConnection(Loader) _resourceLoadLoop:] + 404 (NSURLConnection.mm:367)
6 Foundation 0x000000018300f860 __NSThread__start__ + 996 (NSThread.m:1181)
7 libsystem_pthread.dylib 0x000000018224c32c _pthread_body + 308 (pthread.c:740)
8 libsystem_pthread.dylib 0x000000018224c1f8 _pthread_start + 312 (pthread.c:799)
9 libsystem_pthread.dylib 0x000000018224ac38 thread_start + 4
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000000 x1: 0x0000000000000000 x2: 0x0000000000000000 x3: 0x00000001c42ea5b7
x4: 0x0000000181b29afd x5: 0x000000016bd425a0 x6: 0x000000000000006e x7: 0xffffffffffffffec
x8: 0x0000000008000000 x9: 0x0000000004000000 x10: 0x000000018225163c x11: 0x0000000000000003
x12: 0xffffffffffffffff x13: 0x0000000000000001 x14: 0x00000001820bf557 x15: 0x0000000000000010
x16: 0x0000000000000148 x17: 0x00000000ffffffff x18: 0x0000000000000000 x19: 0x0000000000000006
x20: 0x00000001b2fe3b80 x21: 0x000000016bd425a0 x22: 0x0000000000000303 x23: 0x00000001b2fe3c60
x24: 0x0000000000002403 x25: 0x0000000000002303 x26: 0x0000000000000001 x27: 0x0000000000000000
x28: 0x00000001c41fc808 fp: 0x000000016bd42500 lr: 0x000000018224d354
sp: 0x000000016bd424d0 pc: 0x0000000182139348 cpsr: 0x00000000
答案 0 :(得分:0)
每当我需要提供多个模态时,我最终都会使用addChildViewController()
来添加vc。
我正在从屏幕的下边缘动画childViewController.view来模仿系统模态演示动画。
如果你想使用系统present()方法,请确保你真正出现在最顶层的视图控制器上。