我已经在一个 View 上创建了一些继承,我想尝试在抽象 View 类上处理一种根据 View 类的动态名称创建 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 并且具有正确的值。 我错过了什么?
最佳答案
我很确定您必须在类名前加上模块名。因此,如果您的模块名为 MyProject
,而您正在实例化的类是 MyViewController
,则您应该使用 MyProject.MyViewController
。
如果您不确定您的模块名称是什么,我发现通过打开任何 Storyboard、选择任何 View Controller 并查看身份检查器(它是第二个字段)来阅读它很容易。
关于ios - NSClassFromString 在解包 Optional 值时发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26143563/