我只是向UIWebView+CategoryTest
添加了一个类别UIWebView
,其中使用自定义方法layoutSubviews
对其hlz_layoutSubviews
进行了调整,但UIWebView
从不在我的项目中使用。当我构建并运行应用程序时,在激活[self hlz_layoutSubviews];
CategoryTest [29881:2122091] - [UIWindow hlz_layoutSubviews]:无法识别的选择器发送到实例0x7f8e73d311e0
我错过了什么吗?
Single View Application
模板创建一个空项目。UIWebView+CategoryTest
添加新类别UIWebView
。UIWebView+CategoryTest.m
中的代码替换为以下内容:```
@implementation UIWebView (CategoryTest)
+ (void)load {
// Swizzle the `layoutSubviews` method.
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method originalMethod = class_getInstanceMethod(self, @selector(layoutSubviews));
Method swizzledMethod = class_getInstanceMethod(self, @selector(hlz_layoutSubviews));
method_exchangeImplementations(originalMethod, swizzledMethod);
});
}
- (void)hlz_layoutSubviews {
[self hlz_layoutSubviews];
}
@end
```
Exception Breakpoint
。All Exceptions
添加Breakpoint navigator
答案 0 :(得分:0)
在与其他开发人员讨论之后,原因是我在UIWebView中调出的方法UIView
是由它的超类UIWindow
实现的。因此,方法的交换也会影响UIView的其他子类,例如layoutSubviews
。因此,当UIWindow
发送到hlz_layoutSubviews
的实例时,实际上会向其发送混合的range.format.protection.locked = false;
。