+ (void)load {
[super load];
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class aClass = [self class];
SEL selector = @selector(setBackgroundColor:);
SEL _selector = @selector(cusSetBackgroundColor:);
Method method = class_getInstanceMethod(aClass, selector);
Method _method = class_getInstanceMethod(aClass, _selector);
BOOL did = class_addMethod(aClass, selector, method_getImplementation(_method), method_getTypeEncoding(_method));
if (did) {
class_replaceMethod(aClass, _selector, method_getImplementation(method), method_getTypeEncoding(method));
} else {
class_addMethod(aClass, _selector, method_getImplementation(_method), method_getTypeEncoding(_method));
method_exchangeImplementations(method, _method);
}
});
}
- (void)cusSetBackgroundColor:(UIColor *)backgroundColor
{
NSLog(@"test swizzling");
[self cusSetBackgroundColor:backgroundColor];
}
當我把它放到「UITableView + Swizzling」。並選擇iPad Pro。它會崩潰。 (iPhone運行良好)Xcode8 + ipad。方法Swizzling UITableView backgroundColor崩潰
崩潰日誌爲: void PushNextClassForSettingIMP(id,SEL())中的聲明失敗。 終止應用程序由於未捕獲的異常 'NSInternalInconsistencyException'
卻不知道爲什麼.....