2015-01-05 3 views
0

Я разрабатываю приложение iOS, которое требуется для поиска местоположения и размещения аннотации на карте. Я пишу следующий код для поиска в Swift Language. Но он всегда возвращает значение 0 в качестве ответа.MKLocalSearch return 0 value

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

Посмотрите на то, что делает этот код:

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) 
    } 
} 
+0

Спасибо, я просто комментарий ответ Var: MKLocalSearchResponse вар ERR: NSError = NSError() и работает .. –