使用CoreData保存EVObjects

时间:2016-05-25 07:41:13

标签: ios swift core-data multiple-inheritance

我需要使用CoreData保存一些数据。一般来说这根本不是问题。问题是,使用EVReflection创建数据因此继承了EVObject类。要将收集的数据保存到CoreData,他们还必须继承NSManagedObject。问题是swift不允许你继承多个类。非常感谢任何提示。

class Device : EVObject
{
    var channel : [Channel] = [Channel]()
    var name : String = ""
    var ise_id : Int = 0
    var unreach : Bool = false
    var sticky_unreach : Bool = false
    var config_pending : Bool = false

    override internal func propertyMapping() -> [(String?, String?)] {
        return [("name", "_name"), ("ise_id", "_ise_id"), ("unreach", "_unreach"), ("sticky_unreach", "_sticky_unreach"), ("config_pending", "_config_pending")]
    }
}

3 个答案:

答案 0 :(得分:3)

您不必继承。你可以扩展它们。例如:

class User : NSManagedObject{
   @NSManaged .....
}

//Extension
import EVReflection
extension User : EVReflectable { }

https://github.com/evermeer/EVReflection#extending-existing-objects

答案 1 :(得分:0)

注意我并不知道EVReflection,但我认为这个答案通常适用。

不要使用多重继承。有两个单独的类和一个机制,用于从另一个创建/加载/更新一个对象。协议可以允许以最小化翻译样板的方式完成(如果您能够以安全的方式知道密钥名称,可以使用valueForKey(_:)setValue(_:forKey)

甚至可能没有必要拥有NSManagedObject子类,但只是在所有类中都有一个NSManagedObject实例,并根据需要加载/创建/保存。

答案 2 :(得分:0)

这取决于您要从EVReflection使用的功能。由于NSManagedObject也有NSObject作为它的基类,因此只需将NSManagedObject设置为基类而不是EVObject即可使用大多数函数。

您唯一需要做的就是直接调用EVObject函数,而必须实现该EVObject方法中的代码片段。几乎任何函数都只有一个方便的方法来调用相应的EVReflection函数。

如果您将来有任何疑问,请在GitHub上报告此问题。