失败的NSManagedObject仍在保存中

时间:2016-10-29 23:39:10

标签: swift core-data nsmanagedobject

在我的自定义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 }
    }
}

如何在不保存失败对象的情况下,如何使初始化程序失败并仍保存上下文?

1 个答案:

答案 0 :(得分:0)

您需要尽早 失败。

convenience init?(context: NSManagedObjectContext, a: String?, b: String?) {
    if a == nil {return nil}
    if b == nil {return nil}
    // ...
}

这是合法的,因为在现代Swift中,允许在履行初始化程序的“合同”之前失败。