2014-10-01 36 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

相關問題