如何使用MKLocalSearch在MKMapView中

我在MKMapView中使用MKLocalSearch ..我正在执行如下

extension MYClass: SendLocationDelegate{ func sendCoOrdinates(loccoordinate:CLLocation, placemark:CLPlacemark){ println(" Google VC coordinate is as \(loccoordinate.coordinate.longitude) \(loccoordinate.coordinate.latitude)") let location:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude:loccoordinate.coordinate.latitude, longitude: loccoordinate.coordinate.longitude) let theSpan : MKCoordinateSpan = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta:0.01) let theRegion : MKCoordinateRegion = MKCoordinateRegion(center: location, span: theSpan) self.mapView.setRegion(theRegion, animated: false) let request = MKLocalSearchRequest() request.region = mapView.region let search = MKLocalSearch(request: request) search.startWithCompletionHandler({(response: MKLocalSearchResponse!, error: NSError!) in if error != nil { println("Error occured in search: \(error.localizedDescription)") } else if response.mapItems.count == 0 { println("No matches found") } else { println("Matches found") println("\(response)") } }) } } 

输出:Google VC坐标为72.8561644 19.0176147search错误:操作无法完成。 (MKErrorDomain错误1.)为什么发生这种情况?

编辑:但是,当我更改请求为

 let request = MKLocalSearchRequest() request.naturalLanguageQuery = "india" //request.region = mapView.region let search = MKLocalSearch(request: request) 

我得到了良好的答复

{boundingRegion =“”; mapItems =(“{\ n isCurrentLocation = 0; \ n name = India; \ n placemark = \”印度,印度@ <+ 23.04117260,+ 78.89180550> +/- 0.00m,区域CLCircularRegion(标识符:“<+ 21.84329084, +82.78786665> radius 2237301.34',center:<+ 21.84329084,+ 82.78786665>,radius:2237301.34m)\“; \ n}”); }

一切工作正常..只是你做了一个错误的请求,不包含naturalLanguageQuery作为

  let request = MKLocalSearchRequest() request.region = mapView.region let search = MKLocalSearch(request: request) 

在这种情况下request.naturalLanguageQuery被设置为零….所以你得到(MKErrorDomain错误1)的未知types。查看苹果文档在这里 naturalLanguageQuery不能包含零值…所以请用它

 let request = MKLocalSearchRequest() request.naturalLanguageQuery = "india" let search = MKLocalSearch(request: request) 

您可以使用region参数将search结果的列表缩小到指定区域内或接近指定区域的列表。 指定一个区域并不能保证结果全部在区域内。 这只是对search引擎的暗示。 所以region可以在这里作为一个可选项。 或者你可以提出更好的要求

 let request = MKLocalSearchRequest() request.naturalLanguageQuery = "india" request.region = mapView.region let search = MKLocalSearch(request: request)