核心数据:insertNewObject 与指定初始值设定项有啥区别

Posted

技术标签:

【中文标题】核心数据:insertNewObject 与指定初始值设定项有啥区别【英文标题】:Core Data: What difference between insertNewObject vs designated initializer核心数据:insertNewObject 与指定初始值设定项有什么区别 【发布时间】:2016-12-08 15:49:27 【问题描述】:

我找到了两个解决问题的方法:

public class MyClass: NSManagedObject 
    init(_ entity:NSEntityDescription, dict: NSDictionary, context: NSManagedObjectContext) 
        super.init(entity: entity , insertInto: context)
    


let entity = NSEntityDescription.entity(forEntityName: "MyClass", in: self.context!)
_ = MyClass.init(entity!, dict: item as! NSDictionary, context: self.context!)

let myClass = NSEntityDescription.insertNewObject(forEntityName: "MyClass", into: context) as! MyClass

但我无法理解最终的区别。又对NSManagedObjectContext有何影响?

【问题讨论】:

我不知道第一个版本,但我为您准备了第三个版本:let createe = MyClass(context: context),我更愿意避免知道实体名称的需要。 official doc here 确实提到了 insertNewObject 和 init 的关系 【参考方案1】:

具有相同的效果。 NSEntityDescription 上的方法是一种“工厂”方法,在 Objective-C 中你不会经常看到(该方法在 Swift 之前就已经存在)。但最终结果与使用指定的初始化程序相同。虽然工厂方法的代码不可用,但您可以假设它在某个时候调用了指定的初始化程序。

【讨论】:

【参考方案2】:

init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) 初始化器可用于 ios 3.0+

init(context: NSManagedObjectContext) 初始化器可用于 iOS 10.0+

我使用这两个初始化器来保持与 iOS

【讨论】:

以上是关于核心数据:insertNewObject 与指定初始值设定项有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 管理“核心数据”记录

核心数据中的多次插入

NSEntityDescription.insertNewObject 函数导致 Swift 3 崩溃

JDBC初体验

使用另一个类的 insertNewObject 添加的行未显示在表视图中

数据交互 - Ajax初体验