我想用默认的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的其他任何方式?
这些是正在播放的两个文件:
当我尝试使用nil nibName初始化时,它会加载黑屏。
init(){
super.init(nibName: nil, bundle: nil)
}
当我指定笔尖名称时,它按预期工作:
init(){
super.init(nibName: "EntityCardViewController", bundle: nil)
}
答案 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)
}