Open misaka14 opened 4 years ago
杰哥,你好,想使用KakaJSON获取类的metadata数据,遇到一个崩溃 1、有一个OC的类WTStudent @interface WTStudent : NSObject
杰哥,你好,想使用KakaJSON获取类的metadata数据,遇到一个崩溃
WTStudent
@interface WTStudent : NSObject
@end
@interface WTPerson : NSObject @property (nonatomic, strong) NSString name; @property (nonatomic, assign) NSUInteger age; @property (nonatomic, strong) WTStudent stu; @end
* 2、Swift中的`Student`继承`WTPerson`
class Student: WTPerson {
}
* 3、获取`Student`的MetaData数据
let mt = Metadata.type(Student.self) as? ModelType
* 4、崩溃点
_platform_memmove$VARIANT$Haswell + 77 frame #1: 0x0000000100b7398b Metadata扫描
NominalType<>.builtGenericTypes(self=0x00006000022f4630) at Type.swift:47:25 frame #3: 0x0000000100b437c0 Metadata扫描
BaseType.init(name="WTPerson", type=WTPerson, kind=class, self=0x00006000022f4630) at BaseType.swift:22:9 frame #5: 0x0000000100b6282e Metadata扫描
ClassType.init(name="WTPerson", type=WTPerson, kind=class) at <compiler-generated>:0 frame #7: 0x0000000100b449bc Metadata扫描
static Metadata.type(type=WTPerson, self=Metadata扫描.Metadata) at Metadata.swift:49:22 frame #9: 0x0000000100b4390c Metadata扫描
BaseType.init(name="Student", type=Metadata扫描.Student, kind=class, self=0x00006000022f45a0) at BaseType.swift:22:9 frame #11: 0x0000000100b6282e Metadata扫描
ClassType.init(name="Student", type=Metadata扫描.Student, kind=class) at <compiler-generated>:0 frame #13: 0x0000000100b449bc Metadata扫描
static Metadata.type(type=Metadata扫描.Student, self=Metadata扫描.Metadata) at Metadata.swift:49:22 frame #15: 0x0000000100b57001 Metadata扫描
我也遇到了同样的问题... 这里需要父类也遵循 Convertible 协议才能可以哦 我的解决办法是, 不用kakajson解析, 甚至是遇到nsobject的对象, 都用mjextension
如果要使用 MJExtension 也已经给出了针对 Swift 的示例代码, 可以参考.
MJExtension
@end
@interface WTPerson : NSObject @property (nonatomic, strong) NSString name; @property (nonatomic, assign) NSUInteger age; @property (nonatomic, strong) WTStudent stu; @end
class Student: WTPerson {
}
let mt = Metadata.type(Student.self) as? ModelType
_platform_memmove$VARIANT$Haswell + 77 frame #1: 0x0000000100b7398b Metadata扫描
__swift_memcpy60_4 atNominalType<>.builtGenericTypes(self=0x00006000022f4630) at Type.swift:47:25 frame #3: 0x0000000100b437c0 Metadata扫描
ClassType.build(self=0x00006000022f4630) at ClassType.swift:18:24 frame #4: 0x0000000100b561a2 Metadata扫描BaseType.init(name="WTPerson", type=WTPerson, kind=class, self=0x00006000022f4630) at BaseType.swift:22:9 frame #5: 0x0000000100b6282e Metadata扫描
ModelType.init(name="WTPerson", type=WTPerson, kind=class) atClassType.init(name="WTPerson", type=WTPerson, kind=class) at <compiler-generated>:0 frame #7: 0x0000000100b449bc Metadata扫描
ClassType.__allocating_init(name:type:kind:) at ClassType.swift:0 frame #8: 0x0000000100b72c9d Metadata扫描static Metadata.type(type=WTPerson, self=Metadata扫描.Metadata) at Metadata.swift:49:22 frame #9: 0x0000000100b4390c Metadata扫描
ClassType.build(self=0x00006000022f45a0) at ClassType.swift:21:28 frame #10: 0x0000000100b561a2 Metadata扫描BaseType.init(name="Student", type=Metadata扫描.Student, kind=class, self=0x00006000022f45a0) at BaseType.swift:22:9 frame #11: 0x0000000100b6282e Metadata扫描
ModelType.init(name="Student", type=Metadata扫描.Student, kind=class) atClassType.init(name="Student", type=Metadata扫描.Student, kind=class) at <compiler-generated>:0 frame #13: 0x0000000100b449bc Metadata扫描
ClassType.__allocatinginit(name:type:kind:) at ClassType.swift:0 frame #14: 0x0000000100b72c9d Metadata扫描static Metadata.type(type=Metadata扫描.Student, self=Metadata扫描.Metadata) at Metadata.swift:49:22 frame #15: 0x0000000100b57001 Metadata扫描
AppDelegate.application(application=0x00007f8ffdf04e80, launchOptions=nil, self=0x00006000010f37c0) at AppDelegate.swift:20:27 frame #16: 0x0000000100b57183 Metadata扫描`@objc AppDelegate.application(:didFinishLaunchingWithOptions:) at