2015-12-26 17 views
5

Koordinatensatz habe ich eine benutzerdefinierte bekam MKAnnotation einrichtenbenutzerdefinierte MKAnnotation bewegt sich nicht, wenn

class Location: NSObject, MKAnnotation { 
    var id: Int 
    var title: String? 
    var name: String 

    var coordinate: CLLocationCoordinate2D { 
     didSet{ 
      didChangeValueForKey("coordinate") 
     } 
    } 

, wenn ich die eingestellte Koordinaten es nicht den Stift auf der Karte bewegt. Ich fügte das "didSet" mit der Schlüsselwortkoordinate hinzu, als ich Leute fand, die sagen würden, dass sie es zwingen würde, zu aktualisieren. aber nichts, es bewegt sich nicht. Ich habe überprüft, dass der Lat/Long sich geändert hat und richtig ist, der Pin bewegt sich gerade nicht. Der Titel wird aktualisiert und zeigt die Änderung an.

Ich muss davon ausgehen, dass dies eine benutzerdefinierte Annotation ist. irgendeine Hilfe?

Antwort

10

Wenn Sie diese Änderungsereignisse manuell posten, müssen Sie auch willChangeValue(forKey:) in willSet aufrufen. In Swift 4:

var coordinate: CLLocationCoordinate2D { 
    willSet { 
     willChangeValue(for: \.coordinate) 
    } 
    didSet { 
     didChangeValue(for: \.coordinate) 
    } 
} 

Oder in Swift 3:

var coordinate: CLLocationCoordinate2D { 
    willSet { 
     willChangeValue(forKey: #keyPath(coordinate)) 
    } 
    didSet { 
     didChangeValue(forKey: #keyPath(coordinate)) 
    } 
} 

Oder viel einfacher, geben Sie es einfach als dynamic Eigenschaft und diese Benachrichtigung Zeug ist für Sie erledigt.

dynamic var coordinate: CLLocationCoordinate2D 

Für die Swift 2-Version siehe previous rendition of this answer.