iOS 一个困惑很久提示"invalid mode"的崩溃

2016-12-19 18:31:20 +08:00
 Dean

##下面是异常出现后定位的代码,反复审查后没有发现问题

此处 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
40431 次点击
所在节点    iDev
15 条回复
SeanChense
2016-12-19 18:36:11 +08:00
代码抠出来放一个小工程看看
anerevol
2016-12-19 18:40:28 +08:00
能把日志异常贴全一点么
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 本身没关系
Dean
2016-12-19 18:49:43 +08:00
@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
bzmario
2016-12-19 21:24:49 +08:00
已经添加为子视图、子控制器了,还 present 做什么
mornlight
2016-12-19 21:50:09 +08:00
用 storyboard 了吗,检测一遍关联有没有问题
Dean
2016-12-20 01:08:55 +08:00
@mornlight 与关联无关
Dean
2016-12-20 01:09:21 +08:00
ahmiao
2016-12-20 08:32:33 +08:00
present 之前不需要 addChildViewController 跟 addSubview 吧
Dean
2016-12-20 09:36:58 +08:00
@ahmiao 看 demo
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 里面都干了什么?
crashX
2016-12-20 12:45:26 +08:00
你的 xib 或者 storyboard 关联的 IBOutlet 有问题,检查一下 xib 是否有 warning 。 xib 是大坑,强烈不建议用。
Dean
2016-12-20 14:10:08 +08:00
### 重新更新
> 由于之前写的代码没有备注,拷贝丢失建立 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:^{

}];
}
```
kobe1941
2016-12-20 19:18:03 +08:00
这两行完全多余啊:
[self addChildViewController:popupVC];
[self.view addSubview:popupVC.view];
yuzhouwww
2017-11-06 16:30:27 +08:00
我这边是使用了无效的 IBOutlet 指针

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/328703

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX