【发布时间】:2017-07-11 15:20:21
【问题描述】:
我有AViewController。在A 内部,我有一个MapViewController 实例。 MapViewController 是 A 的子视图控制器。
现在当A 中的按钮获得TouchUpInside 时,我会初始化BViewController。并呈现B。
当初始化BViewController 时,我将MapViewController 传递给B 并作为无主变量存储在B 中。
我需要为A 和B 显示相同的地图。在B 的viewDidLoad 中,我添加MapViewController 作为B 的子视图控制器。
当我按下按钮时,应用程序冻结。没有异常,没有崩溃,没有错误日志。
有人知道为什么会这样吗?
我的尝试:
- 我尝试使用导航控制器并使用 pushViewController 方法,结果相同,应用冻结
- 我尝试将
MapViewController添加为BViewWillAppear中的子级,结果相同,应用程序冻结 - 我尝试在
BViewDidAppear中添加MapViewController作为孩子,不再冻结,但地图根本不存在。 - 我尝试将
B添加为A的 childViewController 而不是现在的B,结果相同,应用程序冻结 - 我检查了关于在主线程上运行的所有指令。
- 在出现
B之前,我尝试在A中将mapViewController作为子级删除,结果相同,应用程序冻结。 - 当存在
B时,我尝试将mapViewController作为子项添加到完成块中,结果相同,应用程序冻结
【问题讨论】:
-
你有没有尝试推送 B viewController 来代替?
-
你真的需要介绍一个新的 VC 吗?如果你想在
B中显示相同的“地图”,也许你只需更改A中的元素而不是加载一个全新的 ViewController 会更好。 -
@ArthurSahakyan 是的,我做到了。同样的结果,应用程序冻结。
-
@DonMag 感谢您的建议。这绝对是一个解决方案。但我确实想了解为什么会出现这个问题。使用
B还可以将代码变成小模块,使代码更具可读性。 PresentB还让用户知道他们正在使用新功能。 -
当你说你 “需要为
A和B显示相同的地图” ...你是否真的试图将MapViewController实例从A移动 到B?