2015-10-04 112 views
1

我在我的应用上使用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]; 

} 

问题

,并把它们的原因: -[UIView(DAKeyboardControl) swizzled_addSubview:]EXC_BAD_ACCESS KERN_PROTECTION_FAILURE at 0x0090dffc

我知道这个问题已经发生了很多很多的电话,但为什么它不能正常工作?

这次事故发生的次数为54次,仅有8个用户,其中50%有越狱设备,但另一个人有非越狱设备!

回答

0

方法调整导致运行时出现问题。我也得到了同样的例外,为了摆脱这种情况,我使用了BABFrameObservingInputAccessoryView,它对我来说工作正常。 https://github.com/brynbodayle/BABFrameObservingInputAccessoryView

+0

你有使用DAKeyboard的这个问题吗? 谢谢你的回复 – Mohamad

+0

绝对比搅拌好。 Swizzling不属于生产代码。 – gnasher729

+0

是的,我之前有同样的问题。 –

0

最有可能你的方法并没有实际发生混淆,所以你会得到一个明显会崩溃的递归调用。这是棘手的棘手问题:它交换两种方法,因此每次调用addSubview都会调用swizzled_addSubview,而调用swizzled_addSubview实际上会调用addSubview。

+0

tnx为您的答复,但你为什么说我的方法实际上并没有调整? 你能解释更多关于这个问题吗? 您是否看到DAKeyboard的类? – Mohamad