2014-12-02 44 views
4

目前我正在試圖做的是與用戶鍵入的位置自動填入一個搜索欄不可用。我正在使用MKLocalSearch來獲取MKLocalSearchResponse,它似乎返回我可以使用的值。但是,要獲取搜索請求中的名稱,地址或座標,需要訪問搜索響應中的MKPlacemark屬性。當我訪問該地標我得到的錯誤:MKMapItem標是迅速

「地標」是不可用:不贊成iOS7的API和斯威夫特

早期不可用
var request = MKLocalSearchRequest() 
    request.naturalLanguageQuery = searchText 
    //PUT HERE: check if network is on? 
    let localSearch: MKLocalSearch = MKLocalSearch(request: request) 
    localSearch.startWithCompletionHandler { (response: MKLocalSearchResponse!, error: NSError!) -> Void in 
     if (error == nil) { 
      println("searched") 
      for res in response.mapItems { 
       self.userSearch.append(res.placemark) 
      } 
      self.userSearch = response.mapItems.placemark 
      self.tableView?.reloadData() 
     } else { 
      println(error) 
     } 
    } 
} 

有誰知道一個變通方法來訪問該地標?

謝謝!

回答

4

response.mapItems陣列在API中聲明爲[AnyObject]!類型。

for環沒有明確說resMKMapItem型(或response.mapItems實際上是[MKMapItem])。

因此res被視爲AnyObject的實例,該實例未被定義爲具有placemark屬性。

這就是爲什麼你會得到編譯器錯誤'placemark' is unavailable...


爲了解決這個問題,投res作爲MKMapItem然後placemark屬性將變得可見。

實施例:

for res in response.mapItems { 
    if let mi = res as? MKMapItem { 
     self.userSearch.append(mi.placemark) 
    } 
} 



此外, for循環後此行:

self.userSearch = response.mapItems.placemark 

沒有意義如果userSearch應該是標數組。
for循環正在將地標附加到該數組,然後該行將該數組設置爲單個地標對象(此外,mapItems對象甚至沒有placemark屬性)。

該行最有可能被刪除。

+0

謝謝安娜!這解決了問題。 – Tootley 2014-12-07 04:31:56