无法在不同的班级

时间:2016-06-01 11:43:22

标签: ios swift uitableview mkmapview

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

  • 自定义搜索栏位于mapView(HomeViewController.swift
  • 之上
  • 使用显示搜索结果(LocationSearchTable.swift
  • 的tableview查看

搜索时,我将带有tableview的视图添加到我的mapview顶部和搜索栏后面。一切正常。

但是现在当我从tableView中选择一个searchresult时它会崩溃,因为它说我的mapView是零。

我在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。这是为什么?我在这里缺少什么?

亲切的问候,

的Wouter

1 个答案:

答案 0 :(得分:2)

您创建HomeViewController的新实例,然后在方法awakeFromNib发生之前询问其mapView。在将HomeViewController控制器添加到屏幕

之前,此时的mapView将为nil

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

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