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í.
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>) {