当前位置: 首页 > 面试题库 >

从Xcode 11.1升级到Xcode 11.2后,由于_UITextLayoutView,应用程序崩溃

沈凯康
2023-03-14
问题内容

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

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

为什么会这样呢?如何防止此崩溃?


问题答案:

恭喜啦

新版本的Xcode(11.2.1)现在可用,这是摆脱此问题的最佳方法。

解决方法

@Mojtaba
Hosseini我提出的解决方案是基于StackOverflow的帮助和我的同伴开发人员的参与。您,我以及所有其他开发人员都已经知道,当Apple宣布新版本时,此问题将消失。

但是除了一切

由于完全不涉及私有API,因此上述解决方案已被Apple Review接受。这种html" target="_blank">方法非常类似于创建属性,例如

@interface UITextView(布局)

要么

UITextView + Layout.h

因此,当您创建属性时,您将直接使用APPLE私有组件并根据您的需求或要求对它们进行重新调制。

最简单的示例是AMFNetworking类

- (void)setImageWithURL:(NSURL *)url {
    [self setImageWithURL:url placeholderImage:nil];
}

希望我已经完成指控

下面的答案只是我方面的一些帮助,可以使开发人员在您最初建议开发人员回滚Xcode时继续进行开发。再次下载8 GB
Xcode是一个不好的做法,因为我们都知道Xcode的新版本将很快发布。

虽然在Xcode 11.2.1中已修复该问题,但我为Xcode 11.2提供了一种解决方案,您可以摆脱这种崩溃:

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

转到“构建设置”搜索“ DEAD_CODE_STRIPPING”并将其设置为“ NO”

DEAD_CODE_STRIPPING = NO

然后

创建文件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;
    }

编译代码,您将拥有一个正在运行的应用程序:)



 类似资料:
  • 以下是我们当前应用程序的配置: Grails 2.4.2 Java:jdk-7u80 MySQL:5.7 Tomcat:7 MySQL连接器:5.1.39 现在我正在尝试从Java7升级Java8。 我正在尝试使用“jdk-8u25”版本(以避免不兼容JVM中提到的问题) 升级后:每当应用程序试图访问数据库时,JVM就会崩溃。 事故报告如下: 同样的问题也出现在命令行grails run-app和

  • 我昨天更新了Android studio到2.3.1和gradle wrapper到Gradle-3.3-all。更新后,我的应用程序停止正确构建,并不断崩溃后,安装在设备。 我尝试使用gradlew installMockDebug安装应用程序,但它无法运行。我禁用了即时运行,正如在其他帖子中提到的,但没有帮助。有什么办法可以修好它吗? 编辑:我的build.gradle文件是:

  • 升级到Flatter 3.0版后,我的项目在第一次运行时崩溃。请参阅下面的日志。求你了,我需要帮助。 在调试模式下在IA模拟器上的AOSP上启动lib/main.dart... ✓内置构建/应用程序/输出/flutter-apk/app-debug.apk. 正在连接ws://127 . 0 . 0 . 1:41249/Xu B1 pru 2 wgq =/ws I/Choreographer(62

  • 当我尝试更新应用程序时,应用程序崩溃了。在我们的应用程序中,我们正在缓存中保存更新的版本,然后尝试从缓存中安装应用程序。应用程序由于android.os.fileuriexposedexception而崩溃。我发现通过intent.getData()在应用程序之外公开了日志android.os.fileuriexposedexception:file:///storage/emulated/0/t

  • 我不是SSL/TLS专家。但遇到以下情况 我们从一个供应商连接到一个webservice并且“安全策略”是TLSv1,所有的工作都像一个魅力。该供应商将该安全策略升级到TLSV1_2016。 从那时起通信就失败了。当他们重新回滚所有的工作。 这似乎已经足够了。 在AWS上,我发现了以下概述 TLSV1.2支持足以支持SSLv3 TLSV1.0 TLSv1_2016 TLSV1.1_2016 TLS

  • 下面是我的代码位。 日志附在下面。 2021-05-12 13:40:27.167 6451-6451/Testpackage E/AndroidRuntime:致命异常:主进程:Testpackage,PID:6451 android。所容纳之物ActivityNotFoundException:未找到可处理Intent{act=android.Intent.action.VIEW dat的活动