故事板不包含带有标识符的视图控制器


175

我不断收到以下错误:

Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller with identifier 'drivingDetails'

这是代码:

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   UIViewController *controller =  [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
   controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
   [self.navigationController pushViewController:controller animated:YES];
}

我已经在identifier上设置了,UIStoryboard但仍然收到此错误。

在此处输入图片说明



4
看起来像您设置了segue的标识符,而不是视图控制器。您要呈现该图片中的哪个视图控制器?而且为什么不只使用segue?
Firoze Lafeer

直到Driving View Controller运作良好。...比我尝试介绍TableViewController时出现错误……您将如何处理?

转到情节提要,删除该情节提要ID,然后再次添加。有时您需要清理构建文件夹和派生数据
onmyway133 '19

Answers:


244

仅供将来参考:

我正在使用Storyboard在iOS 6上进行开发。

我遇到了同样的问题,但是在检查器中找不到“标识符”字段。相反,只需将名为“ Storyboard ID”的字段设置为您要命名的标识符。该字段可以在检查器的“显示身份检查器”选项卡下找到。

[注意-以下注释表明,有些人发现他们需要(也?)将“恢复ID”字段设置在检查器中的情节提要ID的正下方。单击“使用情节提要ID”似乎还不够。]

下面有一张图片供参考:(在这种情况下,我将标识符命名为与我的类相同的名称) 在此处输入图片说明


24
XCode 4.4及更早版本:标识符;XCode 4.5:情节提要ID
ilmiacs 2012年

感谢您的信息。我在按照Google的说明在情节提要中找到标识符时遇到麻烦,但是在Xcode4.6中找不到标识符。这对新手来说是个大问题。谢谢。
初学者

4
对我有用的是使用ReuseIndentifier。情节提要ID仍会导致空指针异常。
Droid Chris

@DroidChris
Ahmed

5
检查“使用情节提要ID”让我感到高兴
preetam 2015年

189

Xcode 7-11中

当您更改情节提要ID并收到类似错误时,

只需清洁您的项目(CMD+ SHIFT+ K


13
为什么我总是忘记这样做?它解决了最疯狂的问题。谢谢,泰德,提醒我!
AlphaCodaSeven15年7

2
从情节提要中已为情节提要中的VC分配了标识符的回购中拉出时,此问题发生在XCode 7.2中。清理项目似乎可以解决问题。
Ed George

2
我以为我失去了主意...一个简单的对话没用,这成功了。
dokun1年

2
是的,它的工作!一段时间后,清理xcode项目将删除对项目的不必要引用
kiran,2016年

3
我来自Android Studio和Android开发。我必须在XCode和Swift中使用多少技巧,这太疯狂了。我真的好哭。说真的
ktamas

43

固定!不仅必须设置segue中的标识符(在我的情况下为DrivingDetails),而且还必须将tableViewController中的标识符设置为DrivingDetails ...检查我的图片:

在此处输入图片说明

我还删除了导航视图控制器,因此现在将两个表视图控制器直接与“推送”动画连接。

*****编辑XCODE 7.0 *****

您必须设置StoryboardId(在这种情况下,viewController嵌入在Navigation控制器中:

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

在此处输入图片说明


2
我遇到了与此问题类似的问题,但是当我进入属性检查器时,我没有看到像您的屏幕截图中所示的两个字段,只有标题字段,没有标识符字段
Anon957

你看上面的答案了吗?我认为是更新的。谢谢
Mat

1
segue的标识符与此无关。只需在情节提要中设置视图控制器的情节提要ID。
Jawwad

可能相关。在iOS7 [storyboard instantiateViewControllerWithIdentifier]中,不是从视图控制器内部的Interface Builder实例化视图。但在iOS6中,它确实做到了
William Entriken 2013年

30
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)

注意:

  • "StoryboardFileName"是情节提要的文件名,而不是情节提要的ID!
  • "StoryboardID"是您在身份检查器中为该故事板手动设置的ID (请参见下面的屏幕截图)。

情节提要ID

有时人们认为第一个是Storyboard ID,第二个是View Controller类名称,因此请注意区别。


1
这个!!我的男人,您刚刚解决了我18个小时的谜团。谢谢您的简要说明。
mrfevrier

1
耶稣基督!谢谢你!.instantiateViewController(withIdentifier: "StoryboardID")应该重命名为.instantiateStoryboard(withIdentifier: "StoryboardID")或更简单些UIStoryboard(name: "StoryboardFileName", bundle: nil).init()
罗斯福

16

位于“身份检查器”选项卡中的标识,名为Xcode 6.3.2的情节提要ID,并选中了“使用情节提要ID”选项。 在此处输入图片说明


一直都是问题,这在我遇到问题的两个地方都有效。它不仅设置了Storyboard ID值,还需要检查“ Use Storyboard ID”
Tyler Hack

“使用情节提要ID”是我最想念的部分。谢谢。
Marcy

9

在向情节提要板添加新的VC之后,仅在设备上,而不在模拟器上,才出现此问题。事实证明,这是由于具有多个情节提要局本地化-VC仅添加到了主要的故事板上。我尝试删除了其他本地化(其中一个是我的iPhone使用的本地化),但仍然出现错误。最后,我不得不在每个本地化环境中使用新的VC 重新创建其他本地化环境。


5

编译器显示以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a 
ViewController with identifier 'SBAddEmployeeVC''

这里创建的情节提要的对象不是包含我们的ViewController的主情节提要。作为我们处理的故事板文件,名为 Main.storyboard。因此,我们需要引用Main.storyboard的对象。

为此使用以下代码:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

storyboardWithName是我们正在使用的情节提要文件的名称,并bundle指定了我们的情节提要所在的捆绑包(即mainBundle)。


5

对于那些与@Ravi Bhanushali一样的问题,这里是一个Swift 4解决方案:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)


应该在@Ravi的答案上添加注释。
Sunil '18

我会,但是没有声誉。拥有足够声誉的人非常值得这样做
confitz20 '18

4

我找到了它...单击情节提要中的视图控制器,单击vc属性检查器中左起的第三个图标-在该屏幕上设置呼叫名称的那个图标,它说'identity'-我的被隐藏了,我不得不点击单词identity,然后显示storyboardID-从代码中添加标识符,完成


4

应该可以在身份检查器中修改“ Storyboard ID”(左侧的第3个图标)。

如果没有,并且您确定没有错字,请尝试清理项目(“产品”->“清理”,或者简单地按Command + shift + K)。


救了我一命。谢谢。(尤其是有关清洁的部分)
Jay

1

输入标识符时,您尚未选择适当的视图控制器,只需检查一次即可(如果已完成),请再次重复该步骤。


我应该选择哪个视图控制器?对不起,我很困惑。

TableViewController * controller = [self.storyboard实例化ViewControllerWithIdentifier:@“ drivingDetails”]; controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@“ name”]; [self.navigationController pushViewController:controller动画:是];像这样?

按照图像,应该选择TableViewController,因为您正在执行操作以在该控制器中显示详细信息。
iamsult


1
请注意,您的segue标识符和视图控制器标识符是不同的。我只是想强调一下,以防万一因为您使用的是相同的名称而引起混淆。您的segue标识符应在prepareForSegue中使用,而视图控制器标识符应用于直接从情节提要中加载视图。scott-sherwood.com/?p=219
Scott Sherwood

1

我的一些视图控制器缺少StoryboardIdentifier属性。

之前:

<viewController
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

后:

<viewController
    storyboardIdentifier="YourViewControllerName"   <----
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

0

我遇到了同样的错误,可以通过更改项目中的以下更改来解决此问题。我在检查器面板中提到了我的班级名称,然后问题解决了。转到->右侧面板中的Identity Inspector在自定义类部分中

class:您的类名(ViewController)

在“身份”部分中的情节提要ID:您的情节提要ID(viewController名称)

在此之后,单击那里的使用情节提要ID选项即可。问题就解决了。希望对您有帮助。


0

使用您的标识符(@“ drivingDetails”)作为情节提要ID。


0

很简单,在主故事板中选择相应的视图控制器,并检查StoryboardID(如果其当前在给定名称的标识符中使用它)并使用它。

这里我的第一个是StoryboardID,让vc = self.storyboard?.instantiateViewController(withIdentifier:“ firstone”)为!tabBarViewController


0

我尝试了上述所有解决方案,但均无效果。

我所做的是:

  • 项目清理
  • 删除派生数据
  • 重新启动Xcode
  • 重新输入先前答案中显示的StoryboardID(在IB内部)。

然后它起作用了。令人震惊的是,我已经在界面构建器中输入了Storyboar ID,并且在再次打开Xcode后将其删除/删除了。

希望这对某人有帮助。


0

清理所有内容并关闭Xcode并不能解决我的问题。

我必须删除viewController并使用新的标识符创建一个新的。


0

注意:如果您在专案中使用cocoapods,请先执行pod deintegraterm Podfile.lock

然后,在任何第三方代码编辑器(例如VSCode)中打开您的项目文件夹,并对引发错误的ViewController名称进行全局搜索。

  1. 重命名/修复您发现的任何错误名称。
  2. 保存所有更改。
  3. 清理并构建您的项目。

现在一切正常。

这是最常见的,当您从Xcode中重命名文件时。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.