ios - 核心数据扩展 : insert NSManagedObject in NSManagedObjectContext

标签 ios swift core-data nsmanagedobject nsmanagedobjectcontext

通常,当我需要向 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/

相关文章:

ios - 试图获取核心数据存储中的总数

iphone - 我可以手动创建核心数据实体类的实例以供临时使用吗?

ios - UITableViewCell 中的 UILabel - 切断信息

iphone - 使用 NSSortDescriptor 时发现一些错误

ios - 从字典数组中搜索结果的最佳方法

ios - 无法使用参数列表 ((ErrorType)、XMPPError) 调用 'XCTAssertEqual'

swift - 快速显示 Playground 侧边栏中数组值的图形 View 的简洁方法?

ios - 具有水平插入的 Collection View 单元格在滚动时不会保持居中

ios - 观察 UICollectionViewCell 中图层框架大小的变化

swift - 是否可以保存来自不同 View Controller 的数据并将其显示在同一个 TableView 单元中?