【问题标题】:Present View Controller and Add Child View Controller Cause App Freeze呈现视图控制器并添加子视图控制器导致应用程序冻结
【发布时间】:2017-07-11 15:20:21
【问题描述】:

我有AViewController。在A 内部,我有一个MapViewController 实例。 MapViewControllerA 的子视图控制器。

现在当A 中的按钮获得TouchUpInside 时,我会初始化BViewController。并呈现B

当初始化BViewController 时,我将MapViewController 传递给B 并作为无主变量存储在B 中。

我需要为AB 显示相同的地图。在BviewDidLoad 中,我添加MapViewController 作为B 的子视图控制器。

当我按下按钮时,应用程序冻结。没有异常,没有崩溃,没有错误日志。

有人知道为什么会这样吗?


我的尝试:

  1. 我尝试使用导航控制器并使用 pushViewController 方法,结果相同,应用冻结
  2. 我尝试将 MapViewController 添加为 B ViewWillAppear 中的子级,结果相同,应用程序冻结
  3. 我尝试在B ViewDidAppear 中添加MapViewController 作为孩子,不再冻结,但地图根本不存在。
  4. 我尝试将 B 添加为 A 的 childViewController 而不是现在的 B,结果相同,应用程序冻结
  5. 我检查了关于在主线程上运行的所有指令。
  6. 在出现 B 之前,我尝试在 A 中将 mapViewController 作为子级删除,结果相同,应用程序冻结。
  7. 当存在B 时,我尝试将mapViewController 作为子项添加到完成块中,结果相同,应用程序冻结

【问题讨论】:

  • 你有没有尝试推送 B viewController 来代替?
  • 你真的需要介绍一个新的 VC 吗?如果你想在B 中显示相同的“地图”,也许你只需更改 A 中的元素而不是加载一个全新的 ViewController 会更好。
  • @ArthurSahakyan 是的,我做到了。同样的结果,应用程序冻结。
  • @DonMag 感谢您的建议。这绝对是一个解决方案。但我确实想了解为什么会出现这个问题。使用B 还可以将代码变成小模块,使代码更具可读性。 Present B 还让用户知道他们正在使用新功能。
  • 当你说你 “需要为AB 显示相同的地图” ...你是否真的试图MapViewController 实例从A 移动B?

标签: ios presentviewcontroller


【解决方案1】:

这可能是一个更好的结构。当您从A 内容切换到B 内容时,您可以随意移动/调整元素的大小......而且由于它们将是您的“主”视图的单独子视图,如果您的界面将从中受益,它们可以重叠那个布局:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多