MKLocalSearch return 0 个值

MKLocalSearch return 0 value

我正在开发一个 iOS 应用程序,它需要搜索位置并将注释添加到地图中。 我编写了以下代码来搜索 Swift 语言。但是,它总是 return 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)
        }

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

看看这段代码在做什么:

var placeMarks: NSMutableArray = NSMutableArray()

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

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

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

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


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

此外,代码应在尝试处理 response.

之前检查 err 是否为 nil

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


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

//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)
    }
}