代码之家  ›  专栏  ›  技术社区  ›  Prashant Tukadiya

当添加子控制器或存在时,故事板中的mapview会发生奇怪的情况崩溃(添加了示例代码)

  •  0
  • Prashant Tukadiya  · 技术社区  · 6 年前

    我在故事板中只有视图控制器和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

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

    enter image description here

    我不明白原因请帮忙

    编辑

    示例应用程序

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

    复制的步骤

    1)在iOS 12的任何模拟器中运行
    2)从xcode按Stop
    3)从模拟器启动应用程序
    4)按钮

    编辑2

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

    文件错误 https://bugreport.apple.com/web/?problemID=46774084

    enter image description here

    2 回复  |  直到 5 年前
        1
  •  2
  •   Sagar Chauhan    6 年前

    我不知道到底是什么问题,为什么你的应用会崩溃。但我找到了解决办法。 添加 mapkit.framework框架 在里面 将二进制文件与库链接 会解决你的问题。

    我希望这对你有帮助。

        2
  •  1
  •   Prashant Tukadiya    5 年前

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

    这是因为 查看调试器框架

    这是苹果开发团队的回复

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

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

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

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

    将示例项目更新为link mapkit可以解决应用程序崩溃的问题。