2014-12-02 49 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