
##下面是异常出现后定位的代码,反复审查后没有发现问题
此处 QRCodePopupViewController 只是普通 ViewController ,主要是是想使用 addChildViewController 弹出卡片式窗口,之前在其他模块写过同样的代码没有任何问题,此处并没有任何影响 RunLoop 的 Mode 逻辑代码,虽然定位在这里但是真没发现问题。。。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:NO]; QRCodePopupViewController *popupVC = [[QRCodePopupViewController alloc] init]; [self addChildViewController:popupVC]; [self.view addSubview:popupVC.view]; [self presentViewController:popupVC animated:NO completion:^{ }]; } ##抛出的异常日志
invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific 1 SeanChense 2016-12-19 18:36:11 +08:00 via iPhone 代码抠出来放一个小工程看看 |
2 anerevol 2016-12-19 18:40:28 +08:00 能把日志异常贴全一点么 |
3 anerevol 2016-12-19 18:44:12 +08:00 参考这样的 https://madordie.github.io/2016/10/12/debug-note/ invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific 这句应该和 crash 本身没关系 |
4 Dean OP @anerevol 其实日志有用的已经贴出了 invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution. libc++abi.dylib: terminate_handler unexpectedly threw an exception |
5 bzmario 2016-12-19 21:24:49 +08:00 已经添加为子视图、子控制器了,还 present 做什么 |
6 mornlight 2016-12-19 21:50:09 +08:00 用 storyboard 了吗,检测一遍关联有没有问题 |
8 Dean OP @SeanChense demo 竟然正常 地址 https://github.com/y2kbug/RunLoopCrash |
9 ahmiao 2016-12-20 08:32:33 +08:00 present 之前不需要 addChildViewController 跟 addSubview 吧 |
11 hekunhotmail 2016-12-20 10:50:50 +08:00 [self addChildViewController:popupVC]; [self.view addSubview:popupVC.view]; [self presentViewController:popupVC animated:NO completion:^{ }]; 你这里调用了系统的 presentViewController 还是重写了? 如果是调用系统的 presentViewController 你知道 presentViewController 里面都干了什么? |
12 crashX 2016-12-20 12:45:26 +08:00 你的 xib 或者 storyboard 关联的 IBOutlet 有问题,检查一下 xib 是否有 warning 。 xib 是大坑,强烈不建议用。 |
13 Dean OP ### 重新更新 > 由于之前写的代码没有备注,拷贝丢失建立 NavigationController 部分, prsentViewController 部分一直怪怪的,思维短路没发现 ```objc - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:NO]; QRCodePopupViewController *popupVC = [[QRCodePopupViewController alloc] init]; [self addChildViewController:popupVC]; [self.view addSubview:popupVC.view]; UINavigationController *popupVN = [[UINavigation controller] initWithRootController:popupVC]; [self presentViewController:popupVN animated:NO completion:^{ }]; } ``` |
14 kobe1941 2016-12-20 19:18:03 +08:00 这两行完全多余啊: [self addChildViewController:popupVC]; [self.view addSubview:popupVC.view]; |
15 yuzhouwww 2017-11-06 16:30:27 +08:00 我这边是使用了无效的 IBOutlet 指针 |