MKLocalSearch返回0值

时间:2015-01-05 12:18:07

标签: ios swift mapkit

我正在开发一个iOS应用程序,它需要搜索位置并将注释放入地图中。 我编写以下代码用于搜索Swift语言。但是,它总是返回0值作为响应。

var searchRequest : MKLocalSearchRequest = MKLocalSearchRequest()
        searchRequest.naturalLanguageQuery = address
        searchRequest.region = self.mapView.region

        var search : MKLocalSearch = MKLocalSearch(request: searchRequest)

        var response: MKLocalSearchResponse
        var err : NSError = NSError()
        search.startWithCompletionHandler { (
            response, err) -> Void in
            var placeMarks: NSMutableArray = NSMutableArray()

            for mp in placeMarks{
                placeMarks.addObject(mp)
            }
            self.mapView.removeAnnotations(self.mapView.annotations)
            self.mapView.showAnnotations(placeMarks, animated: true)
        }

我尝试过不同的地址,城市名称,州名。但没有帮助。 所以,请帮帮我。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

看看这段代码在做什么:

var placeMarks: NSMutableArray = NSMutableArray()

for mp in placeMarks{
    placeMarks.addObject(mp)
}

首先,它创建并初始化一个名为placeMarks的空数组。

然后,它循环遍历placeMarks)并将自己的对象添加到自身(但该代码永远不会执行,因为数组开始时为空)。

然后,这个空的placeMarks数组被传递给showAnnotations,它什么都不做(因为数组是空的)。


相反,代码应循环遍历response.mapItems数组,并将该数组中每个placemark对象的MKMapItem添加到placeMarks数组。

此外,在尝试处理err之前,代码应检查nil是否为response

最后,在调用response之前,errstartWithCompletionHandler的局部变量声明是不必要的。完成处理程序不需要这些变量,传递搜索在块内部创建的那些对象。


修改后的代码可能如下所示:

//var response: MKLocalSearchResponse
//var err : NSError = NSError()

search.startWithCompletionHandler { (
    response, err) -> Void in
    if (err == nil) {
        var placeMarks: NSMutableArray = NSMutableArray()

        for res in response.mapItems {
            if let mi = res as? MKMapItem {
                placeMarks.addObject(mi.placemark)
            }
        }

        self.mapView.removeAnnotations(self.mapView.annotations)
        self.mapView.showAnnotations(placeMarks, animated: true)
    }
}
相关问题