我正在开发一个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)
}我试过用不同的地址,城市名称,州名。但帮不上忙。所以请帮帮我。如有任何帮助,将不胜感激。
发布于 2015-01-05 14:00:15
看看这些代码正在做什么:
var placeMarks: NSMutableArray = NSMutableArray()
for mp in placeMarks{
placeMarks.addObject(mp)
}首先,它创建并初始化一个名为placeMarks的空数组。
然后,它循环遍历placeMarks (这是空的),并将自己的对象添加到自己(但该代码从不执行,因为数组开始是空的)。
然后,将这个空的placeMarks数组传递给什么都不做的showAnnotations (因为该数组是空的)。
相反,代码应该循环遍历response.mapItems数组,并将该数组中每个MKMapItem对象中的placemark添加到placeMarks数组中。
此外,在尝试处理err之前,代码应该检查response是否为nil。
最后,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)
}
}https://stackoverflow.com/questions/27779392
复制相似问题