核心数据: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 的兼容性,它们之间没有区别。
我找到了两个解决问题的方法:
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 的兼容性,它们之间没有区别。