gpt4 book ai didi

swift - 实例化包含UIScrollView的Storyboard时,UIKit崩溃

转载 作者:行者123 更新时间:2023-12-02 07:19:13 25 4
gpt4 key购买 nike

我每个人

我面临UIKit的一个奇怪问题,即无法在每次启动应用程序时重现。问题很简单:我有一个主要的ViewController和一个包含ViewController的子UIScrollView。您可以看到如下图所示:

enter image description here

我添加子 Controller 的代码非常简单:

private func configureKeyboard() {
guard let keyboardViewController = keyboardViewController else { return }

addChild(keyboardViewController)

keyboardContainerView.addSubview(keyboardViewController.view)
keyboardViewController.didMove(toParent: self)
keyboardViewController.view.translatesAutoresizingMaskIntoConstraints = false

keyboardContainerView.topAnchor.constraint(equalTo: keyboardViewController.view.topAnchor, constant: 0).isActive = true
keyboardContainerView.trailingAnchor.constraint(equalTo: keyboardViewController.view.trailingAnchor, constant: 0).isActive = true
keyboardContainerView.bottomAnchor.constraint(equalTo: keyboardViewController.view.bottomAnchor, constant: 0).isActive = true
keyboardContainerView.leadingAnchor.constraint(equalTo: keyboardViewController.view.leadingAnchor, constant: 0).isActive = true
}

但是 keyboardContainerView.addSubview(keyboardViewController.view)行似乎导致崩溃:

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named _UIScrollerImpContainerView because no class named _UIScrollerImpContainerView was found; the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target)'



因此,似乎scrollView是崩溃的原因。堆栈告诉我它似乎落在 init(coder:)上。

enter image description here

这是我实例化 KeyboardController的方法。在 scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)期间, Controller 本身是在协调器上启动的:

class func controller(dataSource: KeyboardDataSource,
stackEditor: StackEditor,
onOperationTouch: @escaping (_ operation: CalculatorOperation) -> Void,
onShouldPresentSettings: @escaping () -> Void) -> KeyboardViewController {
let controller: KeyboardViewController = UIStoryboard(name: "KeyboardViewController", bundle: nil).instantiateInitialViewController() as! KeyboardViewController
controller.dataSource = dataSource
controller.stackEditor = stackEditor
controller.didTouchOperation = onOperationTouch
controller.shouldPresentSettings = onShouldPresentSettings
return controller
}

这种崩溃有点让我想起了UITextView在Xcode的早期版本上可能导致崩溃的崩溃。我在 configureKeyboard上调用 viewDidLoad()。将其放在 viewDidAppear()上不能解决问题。我还应该说在应用程序上启用了Catalyst。但是我只在iOS应用程序上看到此崩溃。在Mac上完美运行。
有时,清理构建文件夹并删除应用程序似乎可以解决此问题。但是我不敢在AppStore上部署这样的随机崩溃版本。这也发生在真实设备上。因此可能不是模拟器问题。
另外, KeyboardController的Storyboard文件已正确关联到iOS应用程序目标。 Apple Developer论坛上没有任何内容。我不知道了

有人遇到一些熟悉的问题吗?

在此先感谢您的帮助。

最佳答案

经过大量测试,我注意到显示带有Mac Catalyst特性的 Storyboard 会导致此问题。编译应用程序时,我必须将 Storyboard 切换到iPhone或iPad特性。此后再也不会出现此问题。

关于swift - 实例化包含UIScrollView的Storyboard时,UIKit崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62170321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com