2016-10-29 9 views
0

私のカスタムNSManagedObjectでは、私はfailable初期化子を使用しています。しかし、失敗してNSManagedObjectContextを保存しても、そのオブジェクトはCore Dataに保存されます。まだNSManagedObjectが保存されていません

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

すぐにに失敗する必要があります。

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

現代スウィフトで、初期の「契約」を履行する前に失敗することが許可されているため、これが合法です。

+0

ありがとう、私は何度も何度も試してきましたが、ちょうどそのチェックが 'self.init'の前に行われなければならないことに気付きました。これは非常に論理的です... –

関連する問題