'故事板不包含带有标识符'的视图控制器。仅在设备上

时间:2016-07-12 09:00:52

标签: ios swift storyboard

我有这个故事板:

enter image description here

使用此ViewController:

enter image description here

我有这个代码来实现我的VC:

let VC = UIStoryboard(name: "Main_iPhone", bundle: nil).instantiateViewControllerWithIdentifier("POIListViewController")

当我在模拟器上运行时,一切正常。

但是当我在真实设备上启动时,我有这个例外:

2016-07-12 10:56:19.073 App-Ely[1935:562264] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Storyboard (<UIStoryboard: 0x185481b0>) doesn't contain a view controller with identifier 'POIListViewController''
*** First throw call stack:
(0x2a23b5f7 0x37aadc77 0x2dc36f25 0x182b8c 0x182dd0 0x12d99f 0x2a1f3f15 0x2a14ee4d 0x2ae83ec1 0x13e0d5 0x168a2d 0x2d7f9607 0x2d8ab0a7 0x2d75d1f1 0x2d6d8eff 0x2a202015 0x2a1ff6f9 0x2a1ffafb 0x2a14cb31 0x2a14c943 0x3152c051 0x2d7426f1 0x16fce3 0x38049aaf)
libc++abi.dylib: terminating with uncaught exception of type NSException
  

编辑:

我的故事板已正确加载:

    let storyboard = UIStoryboard(name: "Main_iPhone", bundle: nil)
    // 'storyboardName' contains "Main_iPhone"
    let storyboardName : String = storyboard.valueForKey("name") as! String
    let VC = storyboard.instantiateViewControllerWithIdentifier("POIListViewController")

5 个答案:

答案 0 :(得分:27)

let storyboard = UIStoryboard(name: "Main_iPhone", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("POIListViewController") as! UIViewController

修改

只需清理您的项目(CMD + SHIFT + K),因为您更改了我认为的故事板名称。

答案 1 :(得分:1)

关闭项目并再次打开。 如果您注意到标识符已消失,那么它必然是自动保存的问题。 只需在设置新标识符后保存Storyboard文件即可。 和清洁 - 建立 - 运行。

答案 2 :(得分:0)

尝试将其更改为:

let VC = self.storyboard!.instantiateViewControllerWithIdentifier("POIListViewController") as! POIListViewController

答案 3 :(得分:0)

我遇到了类似的问题(除了它不仅仅是在设备上)。

此主题中之前的任何建议都不适合我。有效的方法是使用Identity Inspector(在右侧的Utilities窗格中),并确保Storyboard ID字段也填充了View Controller名称(与其上方的Class字段相同)。

答案 4 :(得分:0)

由于本地化文件的副本,我遇到了这样的问题。模拟器可能包括英语,但是此小工具具有自己的语言。 看看您是否有一个带有两个本地化文件的情节提要?