为什么访问类实例成员会产生EXC_BAD_ACCESS? (Xcode beta 5)

时间:2014-08-08 01:51:09

标签: class swift

我有这些课程:

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是明确定义的。

enter image description here

打印名称时

[EDIT2] EXC_BAD_ACCESS。 enter image description here

1 个答案:

答案 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)。

希望它有所帮助。