我在视图控制器中创建了一个属性:
var cityPlaceMark = CLPlacemark()
我想将它分配到locationManger didUpdate位置功能的地标:
CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler:{(placemarks, error)->Void in
if (error != nil) {
println("Reverse geocode failed with error")
return
}
if placemarks.count > 0 {
//var pm = placemarks[0] as CLPlacemark
self.cityPlaceMark = placemarks[0] as CLPlacemark
}
})
应用程序崩溃了一个Thread1:EXC_BAD_ACCESS。
如果我将它保存在闭包中声明的变量中(显示为" var pm"注释掉),它可以正常工作。
有人可以向我解释我做错了什么,以及如何正确地将它分配给一个属性。 谢谢!
答案 0 :(得分:0)
看起来它可能是一个错误。
如果我将它变为可选的:
var cityPlaceMark: CLPlacemark?
并在闭包中实现它:
CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: {(placemarks, error)->Void in
if (error != nil) {
println("Reverse geocode failed with error")
return
}
if placemarks.count > 0 {
self.cityPlaceMark = placemarks[0] as? CLPlacemark
}
})
它现在有效!