添加子控制器或当前(添加了示例代码)时,情节提要中Mapview上的奇怪情况崩溃

时间:2018-12-17 11:13:31

标签: ios swift mapkit

我的故事板中的视图控制器仅具有mapview。

class MapVC: UIViewController {
    class func viewController () -> MapVC {
        let storyboard = UIStoryboard(name: "Dashboard", bundle: nil)
        return storyboard.instantiateViewController(withIdentifier: "MapVC") as! MapVC
    }
    override func viewDidLoad() {
        super.viewDidLoad()

    }
}

我有简单的登录屏幕

在“登录”按钮上的操作我称为此方法

 private func addChildVC (_ vc:UIViewController) {
        self.removeAllChild()
        self.addChild(vc)
        vc.view.frame = self.view.bounds
        self.view.addSubview(vc.view)
        vc.didMove(toParent: self)
        self.currentCenterViewController = vc

  }

使用

MapVC.viewController()

应用崩溃

vc.view.frame = self.view.bounds

奇怪的是,如果我正在调试,例如附加了调试器,并且按登录应用程序时没有崩溃,但是当调试器没有在启动时附加时,然后我在模拟器中启动应用程序,然后附加了进程,并且按了登录按钮,应用程序崩溃了

当前视图控制器也无法正常工作,导致应用崩溃

如果我从情节提要应用中删除Mapview在两种情况下都可以正常运行

当我检查vc.isViewLoaded返回false

尝试loadViewIfRequired() 清除派生数据,清除项目重新启动xcode。 确认我添加了正确的标识符

enter image description here

我无法理解原因,请帮助

编辑

示例应用

https://drive.google.com/open?id=1-otaZhhhDEH4p29CgQP7xZSX9tizceq8

复制步骤

1)在ios 12的任何模拟器中运行
2)从xcode按停止键
3)从模拟器启动应用程序
4)按下按钮

EDIT2

发布视频https://drive.google.com/file/d/1z9C3Re_oVYkRncnE22xRoef2Kv2WyzId/view

提交错误https://bugreport.apple.com/web/?problemID=46774084

enter image description here

2 个答案:

答案 0 :(得分:2)

我不知道实际上是什么问题以及为什么您的应用程序崩溃。但是我找到了解决方案。 在使用库链接二进制文件中添加 MapKit.framework 将解决您的问题。

我希望这会对您有所帮助。

答案 1 :(得分:1)

我已经找到了背后的真正原因。

这是因为视图调试器框架

这是苹果开发团队的回复

  

工程部提供了有关此问题的以下信息:

     

提供的示例项目配置不正确。

     

该应用程序正在使用MapKit框架,但尚未配置为与MapKit链接。使用调试器运行时,MapKit会被拉入,因为它由视图调试器框架链接。

     

从模拟器启动应用程序时,如果没有视图调试器,则MapKit将不会加载到运行时中,因为该应用程序未将其指定为依赖项,因此崩溃。

     

更新示例项目以链接MapKit解决了应用程序崩溃的问题。