【问题标题】:iOS - Interface Builder Outlets Not InitializediOS - Interface Builder Outlets 未初始化
【发布时间】: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 以及如何初始化它们?

谢谢

布赖恩

【问题讨论】:

    标签: iphone ios uiviewcontroller interface-builder iboutlet


    【解决方案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。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2015-12-25
      • 2011-07-06
      • 2011-07-01
      • 2011-06-02
      • 1970-01-01
      相关资源
      最近更新 更多