我正在开发一个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)
}
我尝试过不同的地址,城市名称,州名。但没有帮助。 所以,请帮帮我。任何帮助将不胜感激
答案 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
之前,err
和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)
}
}