从Xcode 11.1升级到Xcode 11.2后,我的应用崩溃了:

***由于未捕获异常'NSInvalidUnarchiveOperationException'而终止应用程序,原因:'无法实例化名为_UITextLayoutView的类,因为没有找到名为_UITextLayoutView的类;类需要在源代码中定义或从库中链接(确保类是正确目标的一部分)'

为什么会这样?我怎样才能防止这种崩溃?


当前回答

作为一个“快速”修复,你可以直接从代码中添加UITextView,而不是通过IB,至少它对我有用。虽然从我的角度来看,最好回滚到以前的Xcode/等待新的。

其他回答

这是Xcode 11.2的一个bug。子类textview在所有没有安装新iOS版本(13.2)的设备上崩溃。您可能最好不要用那个版本构建一个发行版。

你现在可以:

把Xcode降级到11.1或者 把你的设备升级到iOS 13.2

作为一个“快速”修复,你可以直接从代码中添加UITextView,而不是通过IB,至少它对我有用。虽然从我的角度来看,最好回滚到以前的Xcode/等待新的。

我也有同样的问题,我只是把我的Xcode 11.2升级到11.2.1,它工作得很好。

升级后,我在iOs 13和iOs 12上测试了同样的功能,效果很好。

我已经将khan的Obj-C解决方案改编为Swift:

import UIKit

@objc
class UITextViewWorkaround : NSObject {

    static func executeWorkaround() {
        if #available(iOS 13.2, *) {
        } else {
            let className = "_UITextLayoutView"
            let theClass = objc_getClass(className)
            if theClass == nil {
                let classPair: AnyClass? = objc_allocateClassPair(UIView.self, className, 0)
                objc_registerClassPair(classPair!)
            }
        }
    }

}

在AppDelegate中的didFinishLaunchingWithOptions末尾调用它。

谢谢@Aftab !

更新的解决方案: 更新到Xcode 11.2.1。对我来说,它可以在iOS 11、12或13设备上运行。

参考苹果的文档 此更新修复了一个可能导致使用UITextView的应用程序崩溃的关键问题。

旧的解决方案: 从https://developer.apple.com/download/more/下载Xcode 11.1 从11.2切换回11.1修复了崩溃。

而且,对我来说,即使我使用的是Xcode 11.2,当我将iPhone升级到13.2时,崩溃问题也得到了解决。