insertIntoManagedObjectContext

insertIntoManagedObjectContext

我对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。

09-05 20:22