STORYBOARD - 不包含带标识符的视图控制器

时间:2011-11-28 11:57:52

标签: ios objective-c xcode storyboard

我一直收到以下错误:

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,但我仍然收到此错误。

enter image description here


20 个答案:

答案 0 :(得分:236)

仅供将来参考:

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

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

[注意 - 下面的评论表明,有些人发现他们需要(也?)在检查器中的故事板ID下方设置“恢复ID”字段。点击“使用故事板ID”似乎不够。]

下面有一张图片供参考:(在这个例子中,我将我的标识符命名为与我的类相同) enter image description here

答案 1 :(得分:179)

XCODE 7 |中8 | 9

当您更改故事板ID并且出现此类错误时,

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

答案 2 :(得分:40)

固定!不仅必须设置segue中的标识符,在我的例子中是DrivingDetails,而且我的tableViewController中的标识符必须设置为DrivingDetails ...查看我的图片:

enter image description here

我还删除了导航视图控制器,所以现在2个表视图控制器直接连接“推”动画。

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

你必须设置storyboardId(在这种情况下,viewController嵌入在导航控制器中:

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

enter image description here

答案 3 :(得分:14)

有时候这些术语之间存在混淆。

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

请注意,"StoryboardFileName"是故事板的文件名,而不是此处的ID,其中"StoryboardID"实际上是您在身份检查器中手动设置的ID。有时人们对两者之间的区别感到困惑,他们认为第一个实际上是StoryboardID,第二个是ViewController类名。

Storyboard ID

我已经看到了一些关于这个的混淆,所以我想在这个问题上发帖,这个问题吸引了许多Swift中的新程序员带来了类似的问题。

答案 4 :(得分:14)

标识位于Identity Inspector标签中,名为Storyboard ID for Xcode 6.3.2并选中使用Storyboard ID选项。 enter image description here

答案 5 :(得分:9)

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

答案 6 :(得分:4)

我发现了...... 单击storyboard中的视图控制器, 单击vc属性检查器左侧的第三个图标 - 您设置呼叫名称的图标 在那个场景上它说'身份' - 我的隐藏,我不得不点击身份一词 然后显示storyboardID - 从代码中添加标识符,完成

答案 7 :(得分:4)

编译器显示以下错误:

$(document).ready(function() {
  $("img").click(function() {
     if($(this).attr('alt') === 'PEOPLE') {
         $('.core-tabSec').hide();
         $('#tab-1').show();
     }
     else if($(this).attr('alt') === 'PASSION') {
         $('.core-tabSec').hide();
         $('#tab2').show();
     }
     else {
         $('.core-tabSec').hide();
         $('#tab3').show();
     }
   });
});

这里创建的故事板的对象不是包含ViewControllers的主要故事板。我们工作的故事板文件被命名为 的 Main.storyboard 即可。所以我们需要引用 Main.storyboard 的对象。

使用以下代码:

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

此处UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 是我们正在使用的故事板文件的名称,storyboardWithName指定了我们的故事板所在的捆绑包(即bundle)。

答案 8 :(得分:4)

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

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

答案 9 :(得分: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">

答案 10 :(得分:1)

我遇到了同样的问题。我已经给出了标识符,但编译器给出了问题,所以我创建了新控制器,并为该控制器提供了一个新 ID 并添加了它,它运行良好!我也添加了豆荚,但不知道为什么会出现错误,但现在它消失了!另外还可以尝试通过按 CMD+SHIFT+K 键来清理您的项目。让我知道它是否有效。

答案 11 :(得分:0)

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

我做的是:

  • 项目清洁
  • 删除衍生数据
  • 重启Xcode
  • 重新输入之前答案中显示的StoryboardID(在IB内)。

然后它奏效了。令人震惊的是,我在界面构建器中输入了Storyboar ID,并在再次打开Xcode后删除/删除了它。

希望这有助于某人。

答案 12 :(得分:0)

非常简单地选择主故事板中的相应视图控制器并检查storyboardID,如果它现在在给出名称并使用它的标识符中使用它。

这里我的第一个是storyboardID 让vc = self.storyboard?.instantiateViewController(withIdentifier:&#34; firstone&#34;)as! tabBarViewController

答案 13 :(得分:0)

输入标识符时,如果没有选择正确的视图控制器,只需检查一次是否再次重复该过程。

答案 14 :(得分:0)

使用您的标识符(@&#34; drivingDetails&#34;)作为故事板ID。

答案 15 :(得分:0)

XCODE DRAG N DROP PANE不见了!

enter image description here enter image description here

答案 16 :(得分:0)

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

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

答案 17 :(得分:0)

注意:如果您在项目中使用可可足类,请先运行pod deintegraterm Podfile.lock

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

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

现在一切正常。

这通常是在Xcode中重命名文件时引起的。

答案 18 :(得分:0)

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

class:你的类名(ViewController)

在“身份”部分 故事板ID:您的故事板ID(viewController名称)

在此之后单击“使用故事板ID”选项。那就是问题已经完成。我希望它能帮助你......

答案 19 :(得分:0)

检查你的语言,可能(基础)有你的控制器,但可能是特定的故事板没有