【问题标题】:Failing NSManagedObject still being saved失败的 NSManagedObject 仍在保存
【发布时间】:2017-03-12 12:09:52
【问题描述】:

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

我怎样才能使这个初始化程序失败并且仍然保存上下文而不保存失败的对象?

【问题讨论】:

    标签: swift core-data nsmanagedobject


    【解决方案1】:

    你需要早点失败。

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

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

    【讨论】:

    • 谢谢,我一直在测试一遍又一遍,只是注意到必须在self.init 之前完成检查,这非常合乎逻辑......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多