使用CoreData保存EVObjects

3

我需要使用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个回答

3

0

这取决于您想从EVReflection中使用哪些功能。由于NSManagedObject也将NSObject作为其基类,因此您可以通过将NSManagedObject设置为基类来使用大多数函数,而不是EVObject。

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

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


0

请注意,我不了解EVReflection,但我认为这个答案通常适用。

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

甚至可能不需要一个NSManagedObject子类,只需在所有类中拥有一个NSManagedObject实例,根据需要加载/创建/保存即可。


那我需要创建一个新类,然后映射它们之间的操作吗? 这似乎非常不方便。我需要将一些xml数据下载到一个类中,然后将数据复制到具有相同属性的类中,以便将其保存在持久存储中。我只是添加了EVReflection使用的类来从xml创建对象。 - A. Osterthun
似乎完全不使用NSManagedObject是最好的方法,但我无法让数据模型中的关系正常工作... - A. Osterthun
您不必子类化NSManagedObject,但可以在EVObject中拥有一个实例。如果您不喜欢KVC(valueForKeysetValueForKey),则可以从数据模型生成NSManagedObject类。您仍然可以将实例附加到主对象上,以便它可以用于存储/加载数据库中的数据。 - Joseph Lord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接