在NSManaged vars上使用属性观察器

Sat*_*tre 26 observers nsmanagedobject ios swift

我在类中声明了var,如下所示:

@NSManaged var isFavorite: Bool
Run Code Online (Sandbox Code Playgroud)

我想宣布一个属性观察者,非常类似于下面的那个.

 var organization: String {
        didSet { postNotificationWithName( "newData" ) }
    }
Run Code Online (Sandbox Code Playgroud)

但是,Swift告诉我,NSManaged不允许在vars 上拥有财产观察员.有什么方法可以为我的isFavorite变量实现这样的功能或类似的功能吗?

Tom*_*ton 29

是的 - 删除@NSManaged.这不是绝对必要的,但如果你删除它,你不幸需要实现getset财产.你需要添加类似的东西

@objc public var newData: String? {
    set {
        willChangeValue(forKey: "newData")
        setPrimitiveValue(newValue, forKey: "newData")
        didChangeValue(forKey: "newData")
    }
    get {
        willAccessValue(forKey: "newData")
        let text = primitiveValue(forKey: "newData") as? String
        didAccessValue(forKey: "newData")
        return text
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你实际上并不需要它们,那么实现这两者是很烦人的,但这就是现在的方式.

既然你有一个@objc,你可能不需要set,但你仍然可以添加一个,didSet如果你想要的.

  • 如果您实现了答案中的访问器,则在使用Core Data时不需要使用`@ NSManaged`.上面的代码仍然将数据保存到持久性存储中. (4认同)
  • 我将变量声明为“NSManaged”的原因是我要求使用核心数据(作为 Parse 本地数据存储的一部分)在本地缓存该变量。有办法解决吗? (2认同)