2016-10-29 3 views
0

В моем настраиваемом объекте NSManagedObject я использую инициализатор с ошибкой. Но даже когда он терпит неудачу, и я сохраняю 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', что очень логично ... –