2

我有一个名为 ViewControllerHome 的 UIViewController,当用户触摸屏幕上的图像时,我想显示第二个视图,即会员卡。我正在通过触摸图像执行以下操作:

membershipCardViewController = [[MembershipCardViewController alloc] initWithNibName:@"MembershipCard" bundle:nil];
[self presentViewController:membershipCardViewController animated:YES completion:nil];

当代码执行时,presentViewController 行会抛出异常。

我有一个带有 ViewController 的 .xib,其中包含一个视图和一个会员卡的 UIImageView。我将 ViewController 的类设置为我的 MembershipViewController。

一旦出现,我会一触即发。

谁能告诉我我错过了什么?我认为我的所有步骤都是正确的,可以展示视图控制器。

谢谢您的帮助。

4

2 回答 2

3

在 MembershipCardViewController 的 nib 文件中,它的视图(它所控制的任何视图)连接到视图控制器的视图出口。

在此处输入图像描述

要执行此控制,请从文件所有者拖动到要连接到的视图(本例中为灰色视图)

在此处输入图像描述

你应该得到这个:

在此处输入图像描述

文件所有者应指向您的 MembershipCardViewController。每个视图控制器都有一个指向视图的指针。我猜你在删除库存后添加了一些自定义视图。控制从文件所有者拖动到该视图以制作插座。(如果此出口返回 nil,则会抛出异常)。

为了安全起见,请确保文件的所有者(在笔尖中)指向 MembershipCardViewController(这可能不是问题,但听起来您可能从一个空笔尖开始)。

在此处输入图像描述

为此,请单击文件所有者,然后选择右侧的身份检查器。确保类说 MembershipCardViewController

我之前回答过另一个关于这个的问题,我说 initWithNibName:bundle 用于手动加载 nib 文件并且 initWithCoder 将用作替代方案是对的吗?

这解释了实际发生的情况。

于 2013-10-22T20:45:05.693 回答
1

您的 XIB 的目的是归档控制器的视图。设置控制器类只是所需信息的一部分,您还需要连接IBOutlet控制器和视图之间的任何关系。

作为标准,任何子类都UIViewController提供一个名为view. 您需要确保它已连接。否则,当您加载 XIB 时,view不会设置并且您会遇到异常。

有多种方法可以建立连接。检查这个

另请参阅loaded-nib-but-the-view-outlet-was-not-set-new-to-interfacebuilder

于 2013-10-22T20:50:04.663 回答