我有一个NSManagedObject子类,它需要在返回之前被填充(它所有的字段都是非可选的),所以当我进行初始化时,首先使用guard来确保数据(来自JSON)正确,如下所示:
public init(context: NSManagedObjectContext, dictionary: [String: AnyObject]) throws {
guard
let modified_on = date(dictionary["modified_on"] as? String),
let start_on = date(dictionary["start_on"] as? String),
let end_on = date(dictionary["end_on"] as? String),
let ticket_name = dictionary["ticket_name"] as? String
else {
throw ErrorParseModel.ErrorParsing
}
...
...
问题在于编译器返回了一个错误
从初始化程序返回之前未调用Super.init
,因为这个初始化方法可能会在调用super.init
之前抛出异常。
我的问题是如何继续进行: 1. 我应该在创建“虚拟对象”之前先调用super.init,然后再执行保护吗?在这种情况下,我应该在抛出异常之前将此对象从上下文中删除吗? 2. 在进行此保护之前,我可以进行另一个测试以确保entityName正确,如下所示:
guard let entity = NSEntityDescription.entityForName(Ticket.entityName, inManagedObjectContext: context) else {
return
}
在这种情况下,我无法在上下文中创建对象,因为我没有实体,因此在一个上下文中创建一个空实体对象是不可能的(我认为)。
您有任何关于如何继续的建议吗?
谢谢!