【发布时间】:2016-02-19 08:04:30
【问题描述】:
我有一个 NSManagedObject 子类,它需要在正确返回之前完成(它的所有字段都是非可选的),所以当我执行初始化时,首先我使用一个守卫来确保数据(来自 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 isn't called before returning from initializer,因为这个init方法可能会抛出一个异常而之前没有调用super.init。
我的伙计是关于如何进行的: 1.我应该先调用super.init,然后再创建一个“虚拟对象”而不是guard?在这种情况下,我应该在抛出异常之前从上下文中删除这个对象吗? 2.我之前可以对这个守卫做的另一个测试是确保 entityName 正确,如下所示:
guard let entity = NSEntityDescription.entityForName(Ticket.entityName, inManagedObjectContext: context) else {
return
}
在这种情况下,我无法在上下文中创建对象,因为我没有实体,因此(我认为)不可能在一个上下文中创建一个零实体对象。
关于如何进行的任何建议?
谢谢!
【问题讨论】:
标签: ios swift core-data nsmanagedobject