我对initWithEntity:insertIntoManagedObjectContext:
有点困惑。
根据Swift documentation(两阶段初始化),在初始化子类的所有新属性后,应调用super.init
。
但是当我使用以下代码这样做时,我得到了错误:
//In subclass of NSManagedObject
init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?, origin: NavCoordinate, destination:NavCoordinate, city: String, averageSpeedKmPH:NSNumber, client:String)
{
self.origin = origin
self.destination = destination
self.city = city
self.averageSpeedKmPH = averageSpeedKmPH
self.client = client
super.init(entity: entity, insertIntoManagedObjectContext: context)
}
问题是我得到错误:“ Super.init在初始化程序中多次调用”
如果我先打
super.init...
那就可以了。initWithEntity:insertIntoManagedObjectContext的文档还说:
如果您覆盖initWithEntity:insertIntoManagedObjectContext :,则必须确保将self设置为调用super的实现的返回值,如以下示例所示:
但没有任何例子。
覆盖
initWithEntity:insertIntoManagedObjectContext:
的正确方法是什么? 最佳答案
init(entity entity: NSEntityDescription,insertIntoManagedObjectContext context: NSManagedObjectContext?)
的文档说
不鼓励您重写此方法,而应改写awakeFromInsert和/或awakeFromFetch(如果这些方法有共同的逻辑,则应将其分解为从这两个方法中调用的第三个方法)。如果确实使用此方法执行自定义初始化,则可能会导致撤消和重做操作出现问题。
正确的方法是重写awakeFromInsert而不是init。