CoreData扩展:在NSManagedObjectContext中插入NSManagedObject

通常,当我需要在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也将相应地更改。

这种方法是否有潜在的局限性?

repb123 回答:CoreData扩展:在NSManagedObjectContext中插入NSManagedObject

为什么不使用

let device = Device(context: context)

正是由于这个原因,iOS10中添加了哪些?

本文链接:https://www.f2er.com/2751347.html

大家都在问