Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios MKLocalSearch返回0值_Ios_Swift_Mapkit - Fatal编程技术网

Ios MKLocalSearch返回0值

Ios MKLocalSearch返回0值,ios,swift,mapkit,Ios,Swift,Mapkit,我正在开发一个iOS应用程序,需要搜索位置并将注释放入地图。 我用Swift语言编写以下搜索代码。但是,它总是返回0值作为响应 var searchRequest : MKLocalSearchRequest = MKLocalSearchRequest() searchRequest.naturalLanguageQuery = address searchRequest.region = self.mapView.region var sea

我正在开发一个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)
        }
我试过用不同的地址、城市名、州名。但是没有帮助。
所以,请帮帮我。任何帮助都将不胜感激

请查看此代码的作用:

var placeMarks: NSMutableArray = NSMutableArray()

for mp in placeMarks{
    placeMarks.addObject(mp)
}
首先,它创建并初始化一个名为
placeMarks
的空数组

然后,它循环通过
placeMarks
(为空)并将自己的对象添加到自身中(但该代码从不执行,因为数组一开始是空的)

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


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

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

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


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

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

谢谢,我只是对var-response:MKLocalSearchResponse-var-err:NSError=NSError()进行了注释,它正在工作。。