无法在不同 class 上访问地图视图

Can't access mapview on different class

我正在开发一个 iOS 应用程序,但有一个小错误。我的项目包含以下内容:

搜索时,我在地图视图顶部和搜索栏后面添加了带有表格视图的视图。这一切都很好。

但是现在当我 select 来自 tableView 的搜索结果时它崩溃了,因为它说我的 mapView 是 nil。

我在 HomeViewController.swift 中有以下内容:

@IBOutlet weak var mapView: MKMapView!

override func viewDidLoad() {
    mapView.delegate = self
}

像这样将 LocationSearchTable 添加到 mapView:

func didChangeSearchText(searchText: String) {
    if (searchText == "" ) {
        self.locationSearchTable.view.removeFromSuperview()
    } else {
        self.view.insertSubview(self.locationSearchTable.view, aboveSubview: mapView)
    }
}

在 LocationSearchTable.swift 上,我想在点击列表中的内容时调用 mapView:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let mapView = HomeViewController().mapView
    print(mapView)
}

当试图从那里访问 mapView 时,它是 nil。这是为什么?我在这里错过了什么?

亲切的问候,

沃特

您创建了一个新的 HomeViewController 实例,然后在 awakeFromNib 方法发生之前请求它的 mapView。在将 HomeViewController 控制器添加到屏幕之前,此时的 mapView 将为 nil

如果我正确阅读您的层次结构,处理此问题的最佳方法是使用您的表视图中的地图委托回视图。

或者您可以将对 mapView 的引用传递给 tableView