核心数据:insertNewObject 与指定初始值设定项之间有什么区别

Core Data: What difference between insertNewObject vs designated initializer

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

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

效果相同。 NSEntityDescription 上的方法是 "factory" 方法,您在 Objective-C 中很少见到这种方法(该方法在 Swift 出现之前就已存在)。但最终结果与使用指定初始化程序相同。虽然工厂方法的代码不可用,但你可以假设它在某个时候调用了指定的初始化程序。

init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) 初始化程序可用于 iOS 3.0+

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

我使用两个初始化器来保持与 iOS < 10.0 的兼容性,它们之间没有区别。