我在视图上创建了一些继承,我想尝试在抽象视图类上处理根据视图类的动态名称创建viewController的方法。这是我做的:
let className = NSObject.getClassNameFromDynamicType(self)
var viewControllerName = NSString(format: "%@ViewController", className)
// Create view controller from widgetType
var anyobjectype :AnyObject.Type = NSClassFromString(viewControllerName)
var nsobjectype : UIViewController.Type = anyobjectype as UIViewController.Type
和getClassNameFromDynamicType方法:
class func getClassNameFromDynamicType(thing:AnyObject) -> String {
var complexClassName = NSStringFromClass(thing.dynamicType)
return complexClassName.componentsSeparatedByString(".").last!
}
此方法返回正确的字符串:" MyCustomViewController" 但我得到了一个
fatal error: unexpectedly found nil while unwrapping an Optional value
致电
var anyobjectype :AnyObject.Type = NSClassFromString(viewControllerName)
调试器告诉我viewcontrollerName不是nil并且具有正确的值。 我错过了什么?
答案 0 :(得分:3)
我很确定你必须在类名前加上模块名称。因此,如果您的模块被调用MyProject
并且您要实例化的类是MyViewController
,那么您应该使用MyProject.MyViewController
。
如果您不确定您的模块名称是什么,我会通过打开任何故事板,选择任何视图控制器并查看Identity Inspector(它是第二个字段)来轻松阅读它。