Ios NSClassFromString在展开可选值时发现nil
我已经在视图上创建了一些继承,我想尝试在抽象视图类上处理一种根据视图类的动态名称创建viewController的方法。以下是我的工作:Ios NSClassFromString在展开可选值时发现nil,ios,swift,runtime-error,xcode6,Ios,Swift,Runtime Error,Xcode6,我已经在视图上创建了一些继承,我想尝试在抽象视图类上处理一种根据视图类的动态名称创建viewController的方法。以下是我的工作: let className = NSObject.getClassNameFromDynamicType(self) var viewControllerName = NSString(format: "%@ViewController", className) // Create view controller from widge
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
如果你不确定你的模块名是什么,我发现打开任何情节提要、选择任何视图控制器并查看Identity Inspector(它是第二个字段)都很容易阅读它。我非常确定你必须在类名前加上模块名。因此,如果您的模块被称为
MyProject
,并且您正在实例化的类是MyViewController
,那么您应该使用MyProject.MyViewController
如果你不确定你的模块名是什么,我发现打开任何情节提要、选择任何视图控制器并查看Identity Inspector(它是第二个字段)都很容易阅读它。我非常确定你必须在类名前加上模块名。因此,如果您的模块被称为
MyProject
,并且您正在实例化的类是MyViewController
,那么您应该使用MyProject.MyViewController
如果你不确定你的模块名是什么,我发现打开任何情节提要、选择任何视图控制器并查看Identity Inspector(它是第二个字段)都很容易阅读它。我非常确定你必须在类名前加上模块名。因此,如果您的模块被称为
MyProject
,并且您正在实例化的类是MyViewController
,那么您应该使用MyProject.MyViewController
如果你不确定你的模块名是什么,我发现打开任何情节提要、选择任何视图控制器并查看Identity Inspector(第二个字段)都很容易阅读。谢谢!如果这是为了集成而设计的(可能以后作为cocoaPod),那么在这种情况下modulename会是什么呢?MyPodName.ViewController或userproject.ViewController?从未尝试过,但我确信它是在其中定义的模块。模块名类似于java和C中的名称空间,将来可能对某些人有用:它来自于我的getClassNameFromDynamicType,我在返回它之前将它删除了,谢谢!如果这是为了集成而设计的(可能以后作为cocoaPod),那么在这种情况下modulename会是什么呢?MyPodName.ViewController或userproject.ViewController?从未尝试过,但我确信它是在其中定义的模块。模块名类似于java和C中的名称空间,将来可能对某些人有用:它来自于我的getClassNameFromDynamicType,我在返回它之前将它删除了,谢谢!如果这是为了集成而设计的(可能以后作为cocoaPod),那么在这种情况下modulename会是什么呢?MyPodName.ViewController或userproject.ViewController?从未尝试过,但我确信它是在其中定义的模块。模块名类似于java和C中的名称空间,将来可能对某些人有用:它来自于我的getClassNameFromDynamicType,我在返回它之前将它删除了,谢谢!如果这是为了集成而设计的(可能以后作为cocoaPod),那么在这种情况下modulename会是什么呢?MyPodName.ViewController或userproject.ViewController?从未尝试过,但我确信它是在其中定义的模块。模块名类似于java和C中的名称空间#将来可能对某些人有用:它来自我的GetClassName from DynamicType,我在返回它之前将其删除
AnyObject。Type
也称为AnyClass
AnyClass
AnyClass
AnyObject.Type
也称为AnyClass