使用swift为Core Data创建通用Repository类

时间:2018-02-27 20:37:02

标签: swift core-data datamapper

我试图创建一个通用的单一存储库类,它可以保存和获取您要求它的任何实体,可能是由对象类型推断的。我使用this question作为基础。

我试图绕过必须将NSManagedObjectContext传递给实体,并让存储库执行此操作。 这可能吗?

保存实体的理想方法签名如下,其中entityNSManagedObject的子类,具有一些属性:

Repository(persistentContainer).save(entity)

NSManagedObject Extension

extension NSManagedObject
{
    class func createInContext<T>(context:NSManagedObjectContext, type : T.Type) -> T {
        return unsafeDowncast(NSEntityDescription.insertNewObject(forEntityName: entityName(), into: context), to: self) as! T
    }

    class func entityName() -> String {
        let classString = NSStringFromClass(self)

        return classString.components(separatedBy: ".").last ?? classString
    }
}

存储库保存方法

public func save<T>(entity: T) -> Void where T: NSManagedObject
{
    self.container.performBackgroundTask { (context) in    
        let object = T.self.createInContext(context: context, type: T.self)
        // Error checking removed for brevity    
        try! context.save()
    }
}

我在运行时错误是:

  

无法在NSManagedObject类上调用指定的初始化程序&#39; UUID&#39;

及其下方......

  

[AppName.Uuid setUuid:]:无法识别的选择器发送到实例

那是哪一个?是否可以绕过必须使用此方法每次都传递上下文?是否有替代解决方案来实现我的目标?

0 个答案:

没有答案