ios13系統_LSDefaults崩潰解決辦法

最近升級了Xcode11,也使用了ios13,以前的項目好好的,突然在ios13上就閃退了,可能跟xcode版本和ios13都有關係。個人認爲xcode11有點不穩定。
 

如果閃退報以下錯誤:

這個問題是由於ios13取消了kvc導致的。


解決辦法:可以把如下代碼作爲NSObject擴展類添加到項目中,引用即可。

+ (void)load{
    
    SEL originalSelector = @selector(doesNotRecognizeSelector:);
    SEL swizzledSelector = @selector(sw_doesNotRecognizeSelector:);
    
    Method originalMethod = class_getClassMethod(self, originalSelector);
    Method swizzledMethod = class_getClassMethod(self, swizzledSelector);
    
    if(class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))){
        class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
    }else{
        method_exchangeImplementations(originalMethod, swizzledMethod);
    }
}

+ (void)sw_doesNotRecognizeSelector:(SEL)aSelector{
    //處理 _LSDefaults 崩潰問題
    if([[self description] isEqualToString:@"_LSDefaults"] && (aSelector == @selector(sharedInstance))){
        //冷處理...
        return;
    }
    [self sw_doesNotRecognizeSelector:aSelector];
}

用運行時實現方法交換即可
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章