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…