我正在我的应用程序上使用DAKeyboardControll
。
它有一个名为: swizzled_addSubview
的方法并实现如下:
- (void)swizzled_addSubview:(UIView *)subview
{
if (!subview.inputAccessoryView)
{
if ([subview isKindOfClass:[UITextField class]])
{
UITextField *textField = (UITextField *)subview;
if ([textField respondsToSelector:@selector(setInputAccessoryView:)])
{
UIView *nullView = [[UIView alloc] initWithFrame:CGRectZero];
nullView.backgroundColor = [UIColor clearColor];
textField.inputAccessoryView = nullView;
}
}
else if ([subview isKindOfClass:[UITextView class]]) {
UITextView *textView = (UITextView *)subview;
if ([textView respondsToSelector:@selector(setInputAccessoryView:)] && [textView respondsToSelector:@selector(isEditable)] && textView.isEditable)
{
UIView *nullView = [[UIView alloc] initWithFrame:CGRectZero];
nullView.backgroundColor = [UIColor clearColor];
textView.inputAccessoryView = nullView;
}
}
}
[self swizzled_addSubview:subview];
}
问题
最近在我与 AutoLayout 兼容的新版本中,我收到了此方法的一些崩溃,以及它们的原因:
-[UIView(DAKeyboardControl) swizzled_addSubview:]
,
EXC_BAD_ACCESS KERN_PROTECTION_FAILURE 位于 0x0090dffc
我知道这个问题已经在很多次通话中发生过,但是为什么它无法正常工作?
此崩溃仅在 8 个用户中发生了 54 次,其中 50% 拥有越狱设备,但另一个人拥有非越狱设备!
最佳答案
方法混合会导致运行时出现问题。我也遇到了同样的异常,为了摆脱这个问题,我使用了 BABFrameObservingInputAccessoryView,它对我来说工作得很好。 https://github.com/brynbodayle/BABFrameObservingInputAccessoryView
关于ios - 递归混合导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32930788/