Xcode should generate Swift designated initializers for NSManagedObject subclasses

Originator:jesse.d.squires
Number:rdar://21098460 Date Originated:25 May 2015
Status:Open Resolved:
Product:Xcode Product Version:6.3.2 (6D2105)
Classification:Serious bug Reproducible:Always
 
Summary:
Because of Swift's strict initialization flow and @NSManaged, subclasses of NSManagedObject generated by Xcode bypass Swift's initialization rules, allowing you to instantiate an object that **has not** been fully initialized. Thus, accessing non-optional properties on NSManagedObject subclass will crash at runtime.

Steps to Reproduce:
1. Create an entity in Core Data with a few non-optional attributes
2. Generate NSManagedObject subclass in Swift
3. Instantiate the class
4. Access properties
5. Crash at runtime

Expected Results:
Consider this example entity. This is what Xcode should generate.

It should generate a full designated initializer, with any specified default values from the core data model.

class TestEntity: NSManagedObject {

    @NSManaged var myInt: Int32
    @NSManaged var myDouble: Double
    @NSManaged var myFloat: Float
    @NSManaged var myString: String?
    @NSManaged var myDate: NSDate?

    init(context: NSManagedObjectContext,
         myInt: Int32,
         myDouble: Double,
         myFloat: Float,
         myString: String? = "Default value for my string",
         myDate: NSDate? = nil) {
            let entity = NSEntityDescription.entityForName("TestEntity", inManagedObjectContext: context)!
            super.init(entity: entity, insertIntoManagedObjectContext: context)

            self.myInt = myInt
            self.myDouble = myDouble
            self.myFloat = myFloat
            self.myString = myString
            self.myDate = myDate
    }

}


Actual Results:
Xcode does not generate a designated initializer in Swift.

class TestEntity: NSManagedObject {

    @NSManaged var myInt: Int32
    @NSManaged var myDouble: Double
    @NSManaged var myFloat: Float
    @NSManaged var myString: String
    @NSManaged var myDate: NSDate
}

Version:
6.3.2 (6D2105)

Notes:


Configuration:


Attachments:

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!