我试图创建一个通用的单一存储库类,它可以保存和获取您要求它的任何实体,可能是由对象类型推断的。我使用this question作为基础。
我试图绕过必须将NSManagedObjectContext
传递给实体,并让存储库执行此操作。 这可能吗?
保存实体的理想方法签名如下,其中entity
是NSManagedObject
的子类,具有一些属性:
Repository(persistentContainer).save(entity)
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:]:无法识别的选择器发送到实例
那是哪一个?是否可以绕过必须使用此方法每次都传递上下文?是否有替代解决方案来实现我的目标?