iOS开发问题之:Xcode 11 Xib _UITextLayoutView 崩溃

113 阅读1分钟

Xcode 11 Xib _UITextLayoutView 崩溃 崩溃信息如下:

*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named _UITextLayoutView because no class named _UITextLayoutView 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)'

解决方案:

解决方案 一 xib的部分视图改用硬核手写,以避坑。

解决方案 二 下载其他版本Xcode 传送门

解决方案 三 OC 黑魔法 Runtime。

创建 文件 UITextViewWorkaround

UITextViewWorkaround.h

#import <Foundation/Foundation.h>

@interface UITextViewWorkaround : NSObject

  • (void)executeWorkaround; @end

UITextViewWorkaround.m

#import "UITextViewWorkaround.h" #import <objc/runtime.h>

@implementation UITextViewWorkaround

  • (void)executeWorkaround { if (@available(iOS 13.2, *)) {

    } else { const char *className = "_UITextLayoutView"; Class cls = objc_getClass(className); if (cls == nil) { cls = objc_allocateClassPair([UIView class], className, 0); objc_registerClassPair(cls); #if DEBUG printf("added %s dynamically\n", className); #endif } } }

@end

使用该静态方法

#import "UITextViewWorkaround.h"

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch.

    [UITextViewWorkaround executeWorkaround]; return yes; }

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!)
        }
    }
}

}

参考 参考

文章转载来源:blog.csdn.net/vkooy/artic…