2014-10-01 50 views
0

我已经在视图上创建了一些继承,我想尝试处理抽象视图类的方式来创建一个viewController根据视图类的动态名称。下面是我做什么:NSClassFromString发现零,同时展开一个可选值

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不是零,并具有正确的值。 我错过了什么?

+1

'AnyObject.Type'也被称为'AnyClass' – newacct 2014-10-01 19:55:45

回答

3

我很确定你必须在模块名称前加上类名。因此,如果您的模块名为MyProject,并且您正在实例化的类是MyViewController,则应该使用MyProject.MyViewController

如果您不确定您的模块名称是什么,可以通过打开任何故事板,选择任何视图控制器并查看Identity Inspector(它是第二个字段)来轻松地阅读它。

+0

谢谢!如果这是为了集成而设计的(也许以后是一个cocoaPod),那么在这种情况下modulename是什么? MyPodName.ViewController或TheUserProject.ViewController? – Loadex 2014-10-01 14:30:48

+0

从未尝试过,但我确定它是定义它的模块。模块名称就像Java和C#中的命名空间。 – Antonio 2014-10-01 14:32:16

+0

对于将来某些人可能有用:来自我的getClassNameFromDynamicType,在返回它之前将其删除 – Loadex 2014-10-01 14:33:07

相关问题