Swift - 从mapkit注释中传递自定义数据

时间:2015-05-17 01:16:50

标签: swift annotations mkmapview mkannotation mkannotationview

我已经找到并关注了之前关于此主题的一些问题,但仍无法使其发挥作用,我们将不胜感激。

我正在向地图添加注释,这些注释与存储在Parse后端的位置/商店相关联,并且希望能够唯一地标识这些位置,以便我可以将用户点击的位置存储为首选位置。我可以使用注释标题属性,但这可能不是唯一的。我的偏好是将从Parse检索到的位置对象添加到注释或至少是对象ID,以便我可以唯一地识别它。我创建了一个自定义注释,并将locationObject设置为Parse中的位置对象,并验证它是否存储为自定义注释的属性。问题是当我尝试在calloutAccessoryControlTapped中访问此属性时,注释似乎不再包含自定义属性。我的代码如下:

class NewCustomAnnotation: NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D
    var title: String
    var subtitle: String
    var locationObject: AnyObject!

    init(coordinate: CLLocationCoordinate2D, title: String, subtitle: String, locationObject: AnyObject) {
        self.coordinate = coordinate
        self.title = title
        self.subtitle = subtitle
        self.locationObject = locationObject
    }
}

在viewDidLoad中:

var latitude = object["latitude"] as! CLLocationDegrees
                            var longitude = object["longitude"] as! CLLocationDegrees
                            var location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
                            var annotation = NewCustomAnnotation(coordinate: location, title: "", subtitle: "", locationObject: object)
                            self.annotationCategory = "deliveryLocation"
                            annotation.coordinate = location
                            annotation.title = object["name"] as! String
                            annotation.subtitle = "Click to select this location"
                            annotation.locationObject = object
                            println("Annotation 1: \(annotation.description)")
                            println("Object ID: \(annotation.locationObject.objectId)")
                            self.map.addAnnotation(annotation)

在calloutAccessoryControlTapped中,我希望view.annotation.locationObject存在但不存在。

func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) {
        println("Callout tapped")
        preferredDeliveryLocation.text = "Selected store"
        println(view.annotation.title)

    }

其他所有内容都按预期工作,根据println()语句,我正在验证函数是否被调用。 annotation.title可用作标准属性但不是我的自定义annotation.locationObject属性?

0 个答案:

没有答案