การแสดงความยินดี
เวอร์ชั่นใหม่ของ Xcode (11.2.1) มีวางจำหน่ายแล้วซึ่งเป็นวิธีที่ดีที่สุดในการกำจัดปัญหานี้
วิธีการแก้ปัญหา
@ Mojtaba Hosseini วิธีแก้ปัญหาที่ฉันเสนอมาจากความช่วยเหลือและการมีส่วนร่วมจากด้านข้างของฉันไปยังนักพัฒนาเพื่อนของฉันมากกว่า StackOverflow คุณฉันและผู้พัฒนาที่เหลือทั้งหมดที่นี่รู้แล้วว่าเมื่อ Apple ประกาศเวอร์ชันใหม่ปัญหานี้จะหายไป
แต่อยู่ข้างทุกอย่าง
โซลูชันดังกล่าวได้รับการยอมรับจาก Apple Review อย่างแน่นอนเนื่องจากไม่มี API ส่วนตัวที่เกี่ยวข้องเลย วิธีนี้คล้ายกับการสร้างคุณสมบัติเช่น
@interface UITextView (เลย์เอาต์)
หรือ
UITextView + Layout.h
ดังนั้นเมื่อคุณสร้างคุณสมบัติคุณจะใช้ส่วนประกอบส่วนตัวของ APPLE โดยตรงและปรับเปลี่ยนใหม่ตามความต้องการหรือความต้องการของคุณ
ตัวอย่างง่าย ๆ คือ AMFNetworking คลาส
- (void)setImageWithURL:(NSURL *)url {
[self setImageWithURL:url placeholderImage:nil];
}
หวังว่าฉันจะทำกับข้อกล่าวหา
คำตอบด้านล่างเป็นเพียงความช่วยเหลือจากด้านข้างของฉันเพื่อให้นักพัฒนาซอฟต์แวร์สามารถพัฒนาต่อไปได้ในขณะที่คุณเริ่มเสนอนักพัฒนาให้ย้อนกลับ Xcode นี่เป็นวิธีปฏิบัติที่ไม่ดีในการดาวน์โหลด Xcode 8 GB อีกครั้งเนื่องจากเราทุกคนรู้ว่า 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;
}
รวบรวมรหัสและคุณจะมีแอพที่กำลังทำงานอยู่ :)