通常,当我需要向 CoreData 的 NSManagedObjectContext
中插入一个新对象时,我必须按以下方式进行:
let device = NSEntityDescription.insertNewObject(forEntityName: "Device", into: context) as! Device
device. .....// call methods on "device"
但是,由于 .insertNewObject(forEntityName:
的返回类型,这使得过程容易出错不是类型安全的,需要强制转换。此外,entityName
如果类将被重构,则不会获取参数,使其成为真正难以追踪的运行时错误的潜在来源。
我对使用类型安全性更高的方法感兴趣,该方法可以最大限度地降低程序员出错的风险,例如通过为整个 Swift 模块引入以下扩展:
import CoreData
extension NSManagedObject {
class func insert(in context: NSManagedObjectContext) -> Self {
return NSEntityDescription.insertNewObject(forEntityName: String(describing: self), into: context) as! Self
}
}
引入这个扩展后,调用处的代码如下所示:
let device = Device.insert(in: context)
device. .....// call methods on "device"
如果Device
类重命名,方法参数entityName
也会相应改变。
这种方法有什么潜在的局限性吗?
最佳答案
为什么不用
let device = Device(context: context)
在 iOS10 中添加哪个正是出于这个原因?
关于ios - 核心数据扩展 : insert NSManagedObject in NSManagedObjectContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59791047/