获取ClassName而不引用self

时间:2015-07-30 22:55:19

标签: ios swift cocoa-touch uiviewcontroller

我想用默认的nib名称初始化UIViewController子类。我能想到的唯一方法是获取当前的类名。但要做到这一点,我需要引用self,并且在调用super.initWithNib之前是不可能的。

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

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

我不知道该类的实际名称,因为这是一个具有多个子类的抽象类。

加载默认nibName的其他任何方式?

这些是正在播放的两个文件:

enter image description here

当我尝试使用nil nibName初始化时,它会加载黑屏。

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

当我指定笔尖名称时,它按预期工作:

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

2 个答案:

答案 0 :(得分:1)

也许我错过了一些明显的东西,但这在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)
    }
}

答案 1 :(得分:0)

对于Swift 3:

    init() {
        super.init(nibName: String(describing: type(of: self)), bundle: nil)
    }
相关问题