Closed Jude5201 closed 3 years ago
Bug 表现 问题的具体描述 全局断点崩溃在UIView+QMUIBorder.m的load方法里,控制台提示子线程操作UI,堆栈最后崩溃在方法交换里。 截图 Bug 现场的界面截图,或者 Xcode 控制台的错误信息截图,有问题的代码截图
如何重现
...[self showEmptyViewWithImage:UIImageMake(@"erro_img") text:@"" detailText:@"咦,网络断片了~" buttonTitle:@"刷新" buttonAction:@selector(reload:)];
...点击事件触发selector
预期的表现 正常情况下,应该是什么表现:正常执行reload方法 尝试在这里回到主线程进行方法交换,问题解决:
修改后代码如下: OverrideImplementation([UIView class], @selector(layoutSublayersOfLayer:), ^id(__unsafe_unretained Class originClass, SEL originCMD, IMP (^originalIMPProvider)(void)) { return ^(UIView selfObject, CALayer firstArgv) { dispatch_async(dispatch_get_main_queue(), ^{ // call super void (originSelectorIMP)(id, SEL, CALayer ); originSelectorIMP = (void ()(id, SEL, CALayer ))originalIMPProvider(); originSelectorIMP(selfObject, originCMD, firstArgv); ... selfObject.qmui_borderLayer.path = path.CGPath; });
其他信息
你可以试试把 QMUI 那些代码注释掉,我猜应该也是一样的问题。是不是你的业务代码本身就没在主线程操作?
Bug 表现 问题的具体描述 全局断点崩溃在UIView+QMUIBorder.m的load方法里,控制台提示子线程操作UI,堆栈最后崩溃在方法交换里。 截图 Bug 现场的界面截图,或者 Xcode 控制台的错误信息截图,有问题的代码截图
如何重现
...[self showEmptyViewWithImage:UIImageMake(@"erro_img") text:@"" detailText:@"咦,网络断片了~" buttonTitle:@"刷新" buttonAction:@selector(reload:)];
...点击事件触发selector
预期的表现 正常情况下,应该是什么表现:正常执行reload方法 尝试在这里回到主线程进行方法交换,问题解决:
修改后代码如下: OverrideImplementation([UIView class], @selector(layoutSublayersOfLayer:), ^id(__unsafe_unretained Class originClass, SEL originCMD, IMP (^originalIMPProvider)(void)) { return ^(UIView selfObject, CALayer firstArgv) { dispatch_async(dispatch_get_main_queue(), ^{ // call super void (originSelectorIMP)(id, SEL, CALayer ); originSelectorIMP = (void ()(id, SEL, CALayer ))originalIMPProvider(); originSelectorIMP(selfObject, originCMD, firstArgv); ... selfObject.qmui_borderLayer.path = path.CGPath; });
其他信息