【问题标题】:UIViewController init vs initWithNibName:bundle:UIViewController init 与 initWithNibName:bundle:
【发布时间】:2011-05-31 13:33:56
【问题描述】:

在我的应用程序中,我正在推送一个视图控制器(UITableViewController),它还有一个引用 UITableViewCell 的属性/出口。似乎使用以下方法创建控制器:

PreferencesController *pController = [[PreferencesController alloc] init];

不会为xib文件中的UITableViewCell创建对象,因此outlet为null,因此表加载会产生异常。 我解决了这个问题:

PreferencesController *pController = [[PreferencesController alloc] initWithNibName:@"PreferencesController" bundle:nil];

但我并没有真正明白它为什么会起作用,因为从文档看来,init 似乎足以加载相关的 nib 文件 (PreferencesController.xib)。

【问题讨论】:

    标签: ios uitableview uiviewcontroller init


    【解决方案1】:

    PreferencesController 这个名字似乎有些神奇。我刚刚遇到了完全相同的问题。将我的课程(和 xib)重命名为其他名称解决了这个问题。

    【讨论】:

      【解决方案2】:

      编辑:我错了,如果 nib 文件与控制器命名相同,则应该使用 alloc init 自动加载。

      您在 Interface Builder 中的文件所有者是什么?可以通过更改此值来修改默认行为。

      【讨论】:

      • PreferencesController.xib 的文件所有者类是 PreferencesController,LibraryMenuController.xib 是 LibraryMenuController..
        关键是 xib 中未由文件所有者中的视图属性链接的对象未加载使用 init 方法,但需要 initWithNibName ..
      【解决方案3】:

      您必须覆盖initWithNibName:bundle: 而不是init,因为这是“指定初始化程序”。当您从 Nib 文件加载它时,这就是被调用的创建者消息。

      - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
          if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
              // Custom initialization
          }
          return self;
      }
      

      资源

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-21
        • 2012-11-22
        • 2015-12-04
        • 1970-01-01
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        相关资源
        最近更新 更多