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
最后,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)
}
}
我正在开发一个 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
最后,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)
}
}