为啥我必须在自定义 NIB / XIB 中连接 IBOutlet 两次?
Posted
技术标签:
【中文标题】为啥我必须在自定义 NIB / XIB 中连接 IBOutlet 两次?【英文标题】:Why must I hookup an IBOutlet twice in a custom NIB / XIB?为什么我必须在自定义 NIB / XIB 中连接 IBOutlet 两次? 【发布时间】:2011-02-01 16:34:21 【问题描述】:我创建了一个自定义的 myViewController 类,它具有默认的 view,以及子视图的 IBOutlet (topleftView)。
我创建了一个自定义 NIB/XIB 文件来加载这个 myViewController.xib。在 XIB 文件中,我将文件所有者设置为 myViewController,并将 UIViewController 身份类设置为 myViewController。
我的问题是为什么我必须连接并从子视图中的 IBOutlet 向 both 文件所有者和界面构建器中的 UIViewController 进行引用?
我只是想弄清楚它,因为这是我第一次创建自定义 NIB/XIB。我通常只是在 MainWindow 中完成所有操作,但我的应用程序变得太大,所以我想将它们分散开来。
如果我在同一个 nib 文件中没有一个 IBOutlet 到 UIViewController 和文件所有者的多个连接,我会因 _EXC_BAD_ACCESS_ 错误而崩溃。
【问题讨论】:
【参考方案1】:"在 XIB 文件中我设置了 文件所有者到 myViewController ..."
我不确定你在这里做什么。我认为这就是问题所在。您的 XIB 顶层有多少项目?它应该只是文件的所有者、第一响应者和视图。如果这里有另一个控制器对象,那就是你的问题。摆脱它。
"...并设置 UIViewController 身份类 myViewController 也一样”
这部分是正确的。要将您的自定义 UIViewController 连接到 XIB,请在“文件所有者”上计时,转到“身份检查器”,然后在“类”字段的“类身份”下查看。将此设置为“myViewController”(或您命名的任何名称)。
此时,您应该从文件所有者处为您设置的每个插座执行 1 次 ctrl-drag。
【讨论】:
谢谢。这是我的问题,也是我遇到 EXC_BAD_ACCESS 问题的原因。所以如果我有一个自定义视图控制器类,我所要做的就是在类身份检查器中将它设置为文件所有者?我想我还必须在 XIB 中拥有 UIViewCONtroller 对象和它下面的 UIView。在XIB中删除控制器并按照您所说的将UIView留在那里后,一切正常!【参考方案2】:我的问题是为什么我要上钩 起来并从 子视图中的 IBOutlet 文件所有者和 UIViewController 在 界面生成器?
简短的回答:你不知道。只需将文件所有者的类设置为 UIViewController 子类的类名即可。
【讨论】:
以上是关于为啥我必须在自定义 NIB / XIB 中连接 IBOutlet 两次?的主要内容,如果未能解决你的问题,请参考以下文章