iOS - Interface Builder Outlets 未初始化

Posted

技术标签:

【中文标题】iOS - Interface Builder Outlets 未初始化【英文标题】:iOS - Interface Builder Outlets Not Initialized 【发布时间】:2012-03-30 00:45:18 【问题描述】:

我在 Interface Builder 中创建了一个视图,其中包含一些标签和文本作为 IBOutlets。当我从我在 Storyboard 中定义的另一个视图中转到它时,我可以完美地查看这个屏幕。 但是,我有另一个 XIB 和一个关联的 UIViewController,我想从中访问该视图。因为我的 XIB 不在情节提要中,所以我不能继续下去。相反,我必须以编程方式执行转换。

    PlantDetailViewController *plantDetailVC = [[PlantDetailViewController alloc] init];
    [self.currentNavigationController pushViewController:plantDetailVC animated:YES];

执行此代码时,它会转换到视图,但视图只是空白。我已经调试了代码,它进入了 viewDidLoad 和 viewWillAppear 但是我所有的 IBOutlets 都是 NIL ......所以它没有出现在屏幕上!

谁能告诉我为什么它们可能是 NIL 以及如何初始化它们?

谢谢

布赖恩

【问题讨论】:

【参考方案1】:

听起来您是在说您在情节提要中设置了PlantDetailViewController,并且在情节提要之外创建了一些OtherViewController。现在您希望 OtherViewController 实例化在您的故事板中设置的 PlantDetailViewController

假设您的故事板名为MainStoryboard.storyboard

首先,您需要在情节提要中设置PlantDetailViewController 的标识符。您可以在视图控制器部分下的属性检查器中执行此操作。假设您将其设置为PlantDetail

然后,在 OtherViewController 中,这应该可以工作:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
PlantDetailViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PlantDetail"];
[self.currentNavigationController pushViewController:vc animated:YES];

【讨论】:

【参考方案2】:

-init 不会为您加载 nib 文件,如果您想加载 nib,请使用 -initWithNibName:bundle:

如果您使用 nib 命名约定,您可以传递 nil 来加载名称与您的类和默认包匹配的 nib,即 [[PlantDetailViewController alloc] initWithNibName:nil bundle:nil],有关详细信息,请参阅 -nibName 的文档。

【讨论】:

感谢乔纳的回复。但是,我没有用于要加载的视图的 NIB。该视图是在 Storyboard 中定义的,据我所知,Storyboard 中没有 NIB 文件。如果我错了,请纠正我。 调用UIViewControllerinit方法和调用initWithNibName:nil bundle:nil是一样的。如果有一个 nib 与视图控制器的类同名(或名称相同但没有单词 Controller 结尾),则视图控制器将在 loadView 中加载该 nib。

以上是关于iOS - Interface Builder Outlets 未初始化的主要内容,如果未能解决你的问题,请参考以下文章

iOS Interface Builder 中的架构方法

在我看来,iOS 项目未显示从 Interface Builder 构建的 Interface 元素

iOS - Interface Builder Outlets 未初始化

iOS:在 Interface Builder 中使用动态 contentSize 创建 UIScrollView

iOS导航栏中的多个按钮通过Interface Builder?

Xcode 4.2 + iOS6 = Interface Builder 错误