gpt4 book ai didi

ios - 如何在 Swift 中初始化 MapView

转载 作者:行者123 更新时间:2023-11-30 13:53:28 24 4
gpt4 key购买 nike

目标:

  1. 我有一个类,它声明 map View 并查找用户的当前位置。这个类称为MapController()
  2. 我有另一个类需要调用 MapController(),并在用户的当前位置放置一个图钉。

问题:

当我在另一个类中并尝试调用 MapController() 时,MapController() 的 MapView 永远不会被初始化。

我需要的解决方案:

如何初始化 MapView?

最佳答案

您多次引用:

let map = MapController().mapView

这并没有像你想象的那样:

  • MapController() 不是引用现有 View Controller 上的 map ,而是实例化一个全新的 View Controller 。但由于您没有对该 View Controller 执行任何操作,而只是让它超出范围,因此它会立即被释放。

  • 即使您没有让它超出范围(例如,您以某种方式过渡到它),您也不会通过 Storyboard实例化它,因此 socket 将为nil 。如果您确实尝试实例化 MapController 的新实例,您可以执行以下操作:

    let controller = storyboard?.instantiateViewControllerWithIdentifier("MapControllerScene")
  • 坦率地说,即使您解决了上述问题,一个 View Controller 也没有必要与另一个 View Controller 场景的 MKMapView 直接交互。

所以,问题是实现您的预​​期目的的正确方法是什么。

共有三种基本技术:

  1. 保持“添加注释”和 map View 松散耦合,并让注释详细信息 View Controller 只需向 NSNotificationCenter.defaultCenter() 发布通知,然后让 map View 观察该自定义通知。

  2. 浏览 View Controller 层次结构以到达 map View Controller (例如导航栏选项卡 Controller 的第二个子 Controller )。或者主动传递 map View Controller 引用作为从 View Controller 传递到 View Controller 的参数。无论如何,如果您有对现有 map View Controller 的引用,您现在可以直接将数据传回。您可能希望实现一个协议(protocol)来避免这两个类的紧密耦合。

  3. 执行一些展开转场以从注释详细信息 View Controller 导航回 map View ,然后使用 prepareForSegue 将数据传回。在 iOS 9 中,您不再需要仅仅展开到 View Controller 层次结构中更高的类,尽管这样做会让您的生活变得更轻松。

关于ios - 如何在 Swift 中初始化 MapView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33961745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com