iOS开发出错whose view is not in the window hierarchy!的解决
来源:互联网 发布:windows微信机器人 编辑:程序博客网 时间:2024/05/21 05:18
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)
一个简单的单窗口App在运行时出现错误:
2016-04-07 14:28:48.411 BlurViewAndPopView[4364:168520] Warning: Attempt to present <UIAlertController: 0x7a0a4e00> on <BlurViewAndPopView.ViewController: 0x797757d0> whose view is not in the window hierarchy!2016-04-07 14:28:48.935 BlurViewAndPopView[4364:168520] Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UIAlertController: 0x7a0a4e00>)
该app的功能是在root VC中弹出一个popover视图,其中包含一个表视图,在点击表视图中的某一行时回调root VC中的闭包,完成改行内容的对话框弹出效果.
分析如下:根据错误信息,可以清楚看到在试图弹出对话框时,root VC不在窗口的继承体系中,这意味着此时root VC不在window中.
查看popover的cellSelect回调方法:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let selectedItem = items[indexPath] selectionHandler?(selectedItem: selectedItem) dismissViewControllerAnimated(true, completion: nil) }
可以看到在调用root VC注册的selectionHandler闭包之后才做的dismissVC的操作,这显然顺序不对!
我们可以这样修改:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let selectedItem = items[indexPath] defer { selectionHandler?(selectedItem: selectedItem) } dismissViewControllerAnimated(true, completion: nil) }
好了!现在将selectionHandler的回调放到final中,即可保证在root VC中的操作是在dismissVC之后才开始的,这是root VC应该在window的继承体系中了.
0 0
- iOS开发出错whose view is not in the window hierarchy!的解决
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
- [IOS开发记录]Whose view is not in the window hierarchy 错误的解决办法
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
- iOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
- ios开发异常:whose view is not in the window hierarchy! (20
- iOS开发异常warning:***whose view is not in the window hierarchy!
- [ios开发异常]whose view is not in the window hierarchy!
- iOS Whose view is not in the window hierarchy 错误的解决办法
- whose view is not in the window hierarchy!
- whose view is not in the window hierarchy!
- whose view is not in the window hierarchy
- whose view is not in the window hierarchy
- whose view is not in the window hierarchy
- whose view is not in the window hierarchy
- whose view is not in the window hierarchy!
- whose view is not in the window hierarchy!
- Android作为客户端,采用Netty与服务器通信
- android中sharedPreferences的用法
- xshell中Ctrl+S锁定屏幕
- JavaBean, EbtutyBean, POJO概念
- Java笔试题分类总结--位操作
- iOS开发出错whose view is not in the window hierarchy!的解决
- Java动态代理实现
- mazu
- DefaultHandlerExceptionResolver : Failed to convert request element: org.springframework.web.method.
- 阿里云添加二级域名
- C++ 堆排序算法实现
- 详解Spring应用作为EJB客户端调用EJB方法
- android.view.WindowManager$BadTokenException
- 浅谈Android中的LOG查看ANR(一)