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

mat*_*mat 168 xcode objective-c storyboard ios

我一直收到以下错误:

Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller 
with identifier 'drivingDetails'
Run Code Online (Sandbox Code Playgroud)

这是代码:

- (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];
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述


kha*_*liq 240

仅供将来参考:

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

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

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

下面有一张图片供参考:(在这个例子中,我将我的标识符命名为与我的类相同) 在此输入图像描述

  • pre XCode 4.4及更早版本:标识符; XCode 4.5:故事板ID (24认同)
  • 检查**"使用故事板ID"**让我高兴 (5认同)
  • 对我有用的是使用ReuseIndentifier.故事板ID仍会导致空指针异常. (4认同)

Ted*_*Ted 185

XCODE 7中 8 | 9,

当你改变故事板id并且你得到这样的错误时,

只是清理你的项目(CMD + SHIFT + K)

  • 为什么我总是忘记这样做?它解决了最疯狂的问题.谢谢,特德,提醒我! (12认同)
  • 当从故事板中的VC分配了标识符的repo中提取时,在XCode 7.2中发生此问题.清理项目似乎解决了这个问题. (2认同)
  • 我以为我正在失去理智...一个简单的segue没有工作,这就行了. (2认同)
  • 是的工作!!!! 一段时间清理xcode项目将删除不需要的项目引用 (2认同)
  • 我来自Android Studio和Android开发.在XCode和Swift中我必须使用多少hacks才是疯狂的.我真的要哭了.认真. (2认同)

mat*_*mat 41

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

在此输入图像描述

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

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

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

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我遇到了与此问题类似的问题但是当我转到属性检查器时,我没有看到像屏幕中的2个字段只拍摄标题字段,没有标识符字段 (2认同)

Raf*_*ael 21

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

let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

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

故事板ID

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

  • 耶稣基督!谢谢你!```.instantiateViewController(withIdentifier: "StoryboardID")``` 应​​该重命名为 ```.instantiateStoryboard(withIdentifier: "StoryboardID")``` 或者只是更简单的 ```UIStoryboard(name: "StoryboardFileName", bundle : nil).init()``` (2认同)

Bey*_*ron 14

身份位于Identity Inspector选项卡中,名为Storyboard ID for Xcode 6.3.2并选中Use Storyboard ID选项. 在此输入图像描述


Har*_*ngh 9

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


Rav*_*ali 6

编译器显示以下错误:

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

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

为此使用以下代码:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
Run Code Online (Sandbox Code Playgroud)

storyboardWithName是我们正在使用的故事板文件的名称,并bundle指定我们的故事板所在的包(即mainBundle)。


小智 5

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

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