将一系列地点从tableview传递到mapview

时间:2015-01-31 09:39:03

标签: ios uitableview swift mkmapview

这是我的tableview控制器。我在类中声明了我的mapSearch数组来传递。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)


    let selectedMap = mapSearch[indexPath.row]

    let mapviewDestination = MapViewController()
    mapviewDestination.mapString = selectedMap

    performSegueWithIdentifier("showDetails", sender: tableView)


}

这是我的mapViewController代码。

var mapString : String?

实际搜索。

var request = MKLocalSearchRequest()
    request.naturalLanguageQuery = mapString
    request.region = self.placeMap.region
    var search:MKLocalSearch = MKLocalSearch.init(request: request)
    search.startWithCompletionHandler {
        (response:MKLocalSearchResponse!, error:NSError!) in
        if !(error != nil) {
            var placemarks:NSMutableArray = NSMutableArray()
            for item in response.mapItems {
                placemarks.addObject((item as MKMapItem).placemark)
            }
            self.placeMap.removeAnnotations(self.placeMap.annotations)
            self.placeMap.showAnnotations(placemarks, animated: true)
        } else {

        }
    }

我的问题是,当我运行模拟器时,它不会根据mapString进行搜索。

欢迎任何想法!

修改

我一直在尝试这个而且没有运气:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let cell = tableView.cellForRowAtIndexPath(indexPath)
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    let selectedMap = mapSearch[indexPath.row]

    performSegueWithIdentifier("showDetails", sender: self)


}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "showDetails" {
        var mapController = segue.destinationViewController as MapViewController
        mapController.mapString = mapSearch
        }
}

1 个答案:

答案 0 :(得分:1)

您确定mapviewDestination中的didSelectRowAtIndexPath未被释放和销毁吗?你给它分配了一个mapString,但是你没有做任何事情。

搜索是在nil(或空)字符串上执行的,因为您实际上从未设置过mapString

如果你需要使用segue在两个视图控制器之间传递数据,你应该使用UIViewController的{​​{1}}(你只需在你的呈现视图控制器中重新实现它)。它为您提供了一个指向所呈现的视图控制器的指针,您可以在它进入屏幕之前进行配置。