Vitalii Vashchenko
Vitalii Vashchenko

Reputation: 1817

Swift + Xcode 6 beta 3 + Core Data = awakeFromInsert not called?

Need help.

I'm creating new Document-based Core Data Cocoa project. Add entity named 'Entity' into the core data model. Add 'creationDate' propery into it and set its type as Date. And create NSManagedObject subclass from 'Editor' menu.

Now I add into 'Entity.swift' file this code:

override func awakeFromInsert()  {
    super.awakeFromInsert()
    self.creationDate = NSDate()
    println("awakeFromInsert called")
}

Now in my NSPersistentDocument subclass I write such a init() method:

init() {
    super.init()

    var context = self.managedObjectContext
    context.undoManager.disableUndoRegistration()
    var entity = NSEntityDescription.insertNewObjectForEntityForName("Entity", inManagedObjectContext: context)
    context.processPendingChanges()
    context.undoManager.enableUndoRegistration()

    println("\(entity)")
}

Everything compiles... BUT awakeFromInsert is never called! The interesting part is that 'entity' object ain't nil! It was created, but not initialized. And if I write this line in init method

entity.creationDate = NSDate()

then creationDate property will be set to a current date as expected.

But that's not all. If I debug execution step-by-step I can see that execution enters 'Entity.swift' file, but starts from the top of the file, then immediately drops and returns back to the NSPersistentDocument subclass file.

Tell me, is it a bug? Because I'm tired to fight with this nonsense. Thanks.

Upvotes: 2

Views: 762

Answers (1)

Vitalii Vashchenko
Vitalii Vashchenko

Reputation: 1817

Accidentally I got it work: you have to add @objc(YourSubclass) before subclass declaration. I usually did @objc class MySubclass and turned out it does not work (don't know why).

WORKING:

@objc(YourSubclass)
class YourSubclass : NSManagedObject {
...

NOT WORKING:

@objc class YourSubclass : NSManagedObject {
...

Upvotes: 1

Related Questions