создал как swift файл. Открываю этот controller через код ниже и вызываю метод на flutter
let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
let navigationController = UINavigationController(rootViewController: controller)
navigationController.setNavigationBarHidden(true, animated: false)
self.window!.rootViewController = navigationController
self.window!.makeKeyAndVisible()
Но когда я пытаюсь закрыть этот controller (по кнопке закрыть) через код ниже, то у меня при возврате на flutter приложение, крашится с ошибкой libc++abi: terminating due to uncaught exception of type NSException. Разное попробовал, но не понимаю в чем проблема
onCancel: {
result(nil)
navigationController.dismiss(animated: true)
}
Оффтоп. Тут только Флаттер.
А на StackOverflow смотрел? Наверняка ты не первый с такой ошибкой.
Вот первая же ссылка https://stackoverflow.com/questions/64864197/error-on-flutter-ios-libcabi-dylib-terminating-with-uncaught-exception-of-ty
да, смотрел. не помогло (
А ты уверен, что можно nil возвращать? Может быть, в Дарт-коде result не nullable, из-за этого Exception.
nil возвращать льзя. Не ясно какой NSException, так что это гадание на кофейной гуще. (Скорее всего кто-то делает result() не в основном потоке, просто обожаю)
Попробовал «» в result, но равно крашится приложение. Я думал что надо как то зарегестрировать этот controller, где-то в storyboard хз
Какой NSException, что в описании к нему?
Trying to dismiss the presentation controller while transitioning already. (<_UIFullscreenPresentationController: 0x7f9a78fa9fd0>) 2023-05-15 14:21:56.921996+0500 Runner[85914:8853804] *** Assertion failure in -[UIPresentationController _initViewHierarchyForPresentationSuperview:inWindow:]_block_invoke(), UIPresentationController.m:1594 2023-05-15 14:21:57.080962+0500 Runner[85914:8853804] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'The _computeToEndFrameForCurrentTransition block is nil inside the _transitionViewForCurrentTransition block, value of outerStrongSelf currently : <_UIFullscreenPresentationController: 0x7f9a78fa9fd0>. This most likely indicates that an adaptation is happening after a transtion cleared out _computeToEndFrameForCurrentTransition. Captured debug information outside block: presentationController : <_UIFullscreenPresentationController: 0x7f9a78fa9fd0> presentedViewController : <UINavigationController: 0x7f9a802a1600> presentingViewController : <Runner.MyIdController: 0x7f9a79baa6b0>' *** First throw call stack: ( 1 CoreFoundation 0x000000011325c78b __exceptionPreprocess + 242 1 libobjc.A.dylib 0x000000010ec2ab73 objc_exception_throw + 48 2 Foundation 0x0000000111d11109 -[NSMutableDictionary(NSMutableDictionary) classForCoder] + 0 3 UIKitCore 0x000000012b4898ac __80-[UIPresentationController _initViewHierarchyForPresentationSuperview:inWindow:]_block_invoke + 3591 4 UIKitCore 0x000000012b486885 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke.421 + 404 5 UIKitCore 0x000000012c489971 -[_UIAfterCACommitBlock run] + 57 6 UIKitCore 0x000000012c489e71 -[_UIAfterCACommitQueue flush] + 191 7 UIKitCore 0x000000012bed06eb _runAfterCACommitDeferredBlocks + 782 8 UIKitCore 0x000000012bebefa2 _cleanUpAfterCAFlushAndRunDeferredBlocks + 96 9 UIKitCore 0x000000012bef4be1 _afterCACommitHandler + 58 10 CoreFoundation 0x00000001131b9c12 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 11 CoreFoundation 0x00000001131b457f __CFRunLoopDoObservers + 515 12 CoreFoundation 0x00000001131b4aa2 __CFRunLoopRun + 1121 13 CoreFoundation 0x00000001131b4264 CFRunLoopRunSpecific + 560 14 GraphicsServices 0x000000011afdf24e GSEventRunModal + 139 15 UIKitCore 0x000000012bec07bf -[UIApplication _run] + 994 16 UIKitCore 0x000000012bec55de UIApplicationMain + 123 17 Runner 0x0000000102c9ed7f main + 63 18 dyld 0x000000010c0b1384 start_sim + 10 19 ??? 0x0000000203a86310 0x0 + 8651301648 ) libc++abi: terminating due to uncaught exception of type NSException Message from debugger: Terminated due to signal 6
https://stackoverflow.com/questions/25762466/trying-to-dismiss-the-presentation-controller-while-transitioning-already Если вкратце: пытаешься убрать контроллер который занят
Хз почему но вместо того чтобы вызывать dismiss внутри onCancel и onResult, я перетащил его ниже present и это сработало func startMyId( passportData: String?, dateOfBirth: String?, lang: String, result: @escaping FlutterResult, navigationController: UINavigationController ) { let myIdController = MyIdController( passportData: passportData, dateOfBirth: dateOfBirth, lang: lang, onResult: { data in result(data) }, onCancel: { result(nil) } ) myIdController.modalPresentationStyle = .pageSheet navigationController.present(myIdController, animated: true, completion: nil) navigationController.dismiss(animated: true) }
Обсуждают сегодня