the Reverend the Reverend - 1 year ago 90
iOS Question

Get ClassName without referencing self

I want to initialize a UIViewController subclass with a default nib name. The only way I can think is to get the current class name. But to do it, I need to reference self, and it is not possible before calling super.initWithNib.

init(managedObject: NSManagedObject){
let className = PSOClassNameFor(self) /// ERROR -> Cannot reference self

self.managedObject = managedObject
super.init(nibName:className, bundle: nil)

I don't know the actual name for the class, since this is an abstract class with multiple subclasses.

Any other way to load a default nibName?

These are the two files in play:

enter image description here

When I try to initialize with a nil nibName it load a black screen.

super.init(nibName: nil, bundle: nil)

When I specify the nib name it works as expected:

super.init(nibName: "EntityCardViewController", bundle: nil)

Answer Source

Maybe I'm missing something obvious, but this just worked fine in Xcode 6.4/Swift 1.2:

import CoreData
class MySubVC: UITableViewController {
    init(managedObject: NSManagedObject){
        let className = self.dynamicType.description()
        println(className) // Project_Name.MySubVC; not so bad; easily parsed
        super.init(nibName: className, bundle: nil)

    required init!(coder aDecoder: NSCoder!) {
        super.init(coder: aDecoder)
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download