ios - NSClassFromString 在解包 Optional 值时发现 nil

标签 ios swift runtime-error xcode6

我已经在一个 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/

相关文章:

ios - 自定义 SKShapeNode 子项未出现

c++ - 访问没有字符的字符串的第一个字符

ios - 我需要创建线程安全变量吗?

ios - 通过几个不相关的类传递方法调用

ios - ProgressHUD.showSuccess ("Success") 给出链接错误

c++ - 代码 C++ 中的运行时错误

c# - 初始化数组时出现 StackOverflow 异常

objective-c - 复选标记代码错误

ios - 仅检测矩形物理体一侧的碰撞 - Swift3

swift - 使用 Swift 的 UITextField 中不可编辑的前缀