ios - 递归混合导致崩溃

标签 ios objective-c crash swizzling isa-swizzling

我正在我的应用程序上使用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/

相关文章:

ios - xcode-字符串执行错误

Android Studio API 29 及更高版本的模拟器立即崩溃

ios - 使用sharedmanager后的警报

ios - 按其他数组排序数组?

ios - Swift - 未设置默认属性值

iphone - 在保持触摸的同时按下时隐藏 UITabBar

ios - iOS Objective C-在两个 View Controller 之间传递参数时出错

php - PHP 加密与 iOS 和 .NET 的区别

ios - 在 UItableView 单元格中快速播放视频

Android 服务在重启时不保留数据