我目前正在尝试创建一个搜索栏,以用户键入的方式自动填充位置。我正在使用MKLocalSearch获取MKLocalSearchResponse,它似乎返回我可以使用的值。但是,要从搜索中获取名称,地址或坐标,需要访问搜索响应中的MKPlacemark属性。当我访问地标时,我收到错误:
'placemark'不可用:自iOS7及更早版本弃用的API在Swift
中不可用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)
}
}
}
有没有人知道访问地标的解决方法?
谢谢!
答案 0 :(得分:4)
response.mapItems
数组在API中声明为[AnyObject]!
类型。
for
循环并未明确指出res
属于MKMapItem
类型(或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
属性)。
最有可能删除此行。