我有这些课程:
class Poi {
var id: String
var location: CLLocationCoordinate2D
init () {
id = ""
location = CLLocationCoordinate2DMake(0, 0)
}
}
class CustomMapPinAnnotation : NSObject, MKAnnotation {
var poi: Poi!
var coordinate: CLLocationCoordinate2D
init(poi: Poi) {
self.poi = poi
self.coordinate = poi.location
}
}
每当我从CustomMapPinAnnotation类的外部访问CustomMapPinAnnotation实例中的任何poi成员(例如,在字符串中插入annotation.poi.id)时,我得到一个EXC_BAD_ACCESS,尽管poi不是nil。
func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) {
println("Pin button Clicked")
let annotation:CustomMapPinAnnotation = view.annotation as CustomMapPinAnnotation
let message = "Situé sis \(annotation.subtitle)\nid : \(annotation.poi.id)" // I have the EXC_BAD_ACCESS (Code 2) here
}
有什么想法吗?
[EDIT1]调试信息,其中人们看到annotation.poi是明确定义的。
打印名称时
[EDIT2] EXC_BAD_ACCESS。
答案 0 :(得分:0)
我在这方面失去了这么长时间,我认为 - 如果有人面对同样的事情,那就值得回答一个难以置信的"行为形式Xcode。
在绝望的尝试中,我只是将成员移动到下面一行(切换2个成员)并且应用程序运行,不再有EXC_BAD_ACCESS!现在工作代码就是屁股:
class CustomMapPinAnnotation : NSObject, MKAnnotation {
var coordinate: CLLocationCoordinate2D
var poi: Poi!
init(poi: Poi) {
self.poi = poi
self.coordinate = poi.location
}
}
这种行为最有可能归因于有点Xcode /编译器错误(Xcode 6 beta 5)。
希望它有所帮助。