您可以使用为带有情节提要的 xib 创建的视图控制器吗?

Posted

技术标签:

【中文标题】您可以使用为带有情节提要的 xib 创建的视图控制器吗?【英文标题】:Can you use a view controller created for a xib with storyboards? 【发布时间】:2012-09-14 13:08:56 【问题描述】:

我们有一个框架,通常用于我们的 ios 项目,其中包括我们所有的登录信息和类似的东西。它是在 iOS5 之前创建的,因此不使用情节提要。我们现在正计划进入故事板。我创建了初始视图控制器,与另一个项目中的 xib 完全一样。然后我在 Identity Inspector 中设置视图控制器,并连接到 Connections Inspector 的所有出口和操作。但是,当我运行该项目时,出现以下错误:

2012-09-14 08:46:15.366 Mixable[3923:f803] Unknown class LoginViewController in Interface Builder file.
2012-09-14 08:46:15.460 Mixable[3923:f803] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x6851200> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key loginBtnFacebook.'
*** First throw call stack:
(0x14b1022 0xeb1cd6 0x14b0ee1 0x9c2022 0x933f6b 0x933edb 0x94ed50 0x23671a 0x14b2dea 0x141c7f1 0x23526e 0xdb1fc 0xdb779 0xdb99b 0x3a401 0x3a670 0x3a836 0x4172a 0x12596 0x13274 0x22183 0x22c38 0x16634 0x139bef5 0x1485195 0x13e9ff2 0x13e88da 0x13e7d84 0x13e7c9b 0x12c65 0x14626 0x201d 0x1f85 0x1)
terminate called throwing an exception

如果我删除了与 loginBtnFacebook 的连接,我只需将它用于我已连接的下一个插座,并一直持续到我删除所有插座。

是否可以使用相同的视图控制器,还是我们需要重写它们?

【问题讨论】:

您是否将所有这些出口都定义为视图控制器类的 .h 中的属性?在回答您的问题时,视图控制器大致相同(除了使用了哪些 init 方法,例如,您显然不使用 initWithNibNamed 与情节提要,但这似乎与您的问题无关)。 是的。我将它们全部定义为:@property (nonatomic, retain) IBOutlet ... ARC 程序中的 IBOutlet should generally be weak,但这几乎肯定与毫无疑问是更基本的出口链接问题无关。 【参考方案1】:

在回答您的问题时,视图控制器大致相同(除了使用了哪些 init 方法,例如,您显然不使用带有情节提要的 initWithNibNamed,但这似乎与您的问题无关)。

所以,有几个与您的错误相关的问题,这是插座链接问题的典型症状:

    您是否配置了场景的视图控制器类?单击场景底部的视图控制器按钮,单击右侧面板顶部的“身份检查器”选项卡按钮,并确保指定视图控制器类。

    您的 IBOutlet 连接正确吗?当您单击工具栏右侧的“Assistant Editor”时,您应该会看到您的班级的 .h 文件显示在底部。 IBOutlet 定义旁边是否有实心黑点以确保所有内容都已连接?

    这不太可能是问题,但是您是否将视图控制器的 .m 文件包含在“构建阶段”的“编译源”部分中?

【讨论】:

以上是关于您可以使用为带有情节提要的 xib 创建的视图控制器吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 XIB 中的按钮链接到情节提要中的视图控制器

如何在多个 .xib 文件之间执行展开转场(不使用情节提要)

在情节提要中调用 xib

XIB 到情节提要

用 XIB 替换情节提要

从情节提要中提取 nibs/xibs (iOS)