在我的自定义NSManagedObject中,我正在使用一个可用的初始化程序。但即使失败并保存NSManagedObjectContext,对象也会保存到Core Data中。
NSManagedObject:
class Foo: NSManagedObject {
@NSManaged var a: String
@NSManaged var b: String
convenience init?(context: NSManagedObjectContext, a: String?, b: String?) {
let description = NSEntityDescription.entity(forEntityName: "Foo", in: context)!
self.init(entity: description, insertInto: context)
if let a = a { self.a = a } else { return nil }
if let b = b { self.b = b } else { return nil }
}
}
如何在不保存失败对象的情况下,如何使初始化程序失败并仍保存上下文?
答案 0 :(得分:0)
您需要尽早 失败。
convenience init?(context: NSManagedObjectContext, a: String?, b: String?) {
if a == nil {return nil}
if b == nil {return nil}
// ...
}
这是合法的,因为在现代Swift中,允许在履行初始化程序的“合同”之前失败。