ios swift nsmanagedobject observers

ios - Usando observadores de propiedad en NSManaged vars



swift nsmanagedobject (2)

Tengo una var declarada en una clase como asi:

@NSManaged var isFavorite: Bool

Me gustaría declarar un observador de propiedad, muy similar al de abajo.

var organization: String { didSet { postNotificationWithName( "newData" ) } }

Sin embargo, Swift me dice que no está permitido tener observadores de propiedades en vars NSManaged por NSManaged . ¿Hay alguna manera en que pueda implementar tal característica o algo similar para mi variable isFavorite ?


Sí, elimine el @NSManaged . No es absolutamente necesario, pero si lo elimina, desafortunadamente, debe implementar get y set para la propiedad. Necesitarías agregar algo como

public var newData: String? { set { self.willChangeValue(forKey: "newData") self.setPrimitiveValue(newValue, forKey: "newData") self.didChangeValue(forKey: "newData") } get { self.willAccessValue(forKey: "newData") let text = self.primitiveValue(forKey: "newData") as? String self.didAccessValue(forKey: "newData") return text } }

Es un poco molesto implementar ambos si realmente no los necesitas, pero así es por ahora.

Como tendrá un set , es posible que no necesite un didSet , pero aún puede agregar un didSet si lo desea.


Whoops! Paul Patterson tiene razón. Lo que se supone que debes usar es Key Value Observing, que es exactamente lo que dice que debes hacer en el enlace que sugerí.

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

Consulte también las notas de swift: https://developer.apple.com/library/mac/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html (use el menú ''En esta página'' en la parte superior derecha de la página para el Valor-clave Observando)

Entonces algo como

objectToObserve.addObserver(self, forKeyPath: "organization", options: .New, context: &myContext)

Emparejado con

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {