2015-01-05 69 views
0

我正在開發一個iOS應用程序,它需要搜索位置並將註釋放入地圖中。 我寫下面的代碼搜索Swift語言。但是,它總是返回0值作爲響應。MKLocalSearch返回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

看:

var placeMarks: NSMutableArray = NSMutableArray() 

for mp in placeMarks{ 
    placeMarks.addObject(mp) 
} 

首先,它創建和初始化一個空數組稱爲placeMarks。然後,它通過placeMarks(它是)循環,並將其自己的對象添加到自身(但由於該數組是空的,因此不會執行代碼)。

然後,這個空的placeMarks數組傳遞給showAnnotations,它什麼都不做(因爲數組是空的)。


相反,代碼應遍歷response.mapItems陣列,並且從每個MKMapItem對象陣列到placeMarks陣列中添加placemark

此外,在嘗試處理response之前,代碼應檢查err是否爲nil

最後,在調用startWithCompletionHandler之前的局部變量聲明responseerr是不必要的。完成處理程序不需要這些變量,那些搜索已在內部創建的對象傳遞給該塊。


修改後的代碼可能是這樣的:

//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 VAR錯誤:NSError = NSError() 和它的工作.. –