【发布时间】:2017-10-06 07:43:05
【问题描述】:
+ (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 运行良好)
崩溃日志是: void PushNextClassForSettingIMP(id, SEL()) 中的断言失败。 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序
不知道为什么.....
【问题讨论】:
标签: ios objective-c uitableview ipad swizzling