【问题标题】:iOS5 Storyboard UIViewController which init method is called by the storyboard?iOS5 Storyboard UIViewController 的故事板调用了哪个init方法?
【发布时间】:2012-02-04 16:28:05
【问题描述】:

对于添加到故事板的UIViewControllers,故事板调用了哪个init 方法?

【问题讨论】:

    标签: uiviewcontroller ios5 storyboard


    【解决方案1】:

    使用的初始化器是initWithCoder:

    - (id)initWithCoder:(NSCoder *)decoder
    

    之后你还会收到awakeFromNib消息。

    【讨论】:

    • 只有我一个人觉得奇怪的是默认(?)初始化不是从 initWithCoder 调用的吗?
    • 不,它不是指定的 init,init 应该调用另一个具有(通常)更多参数的 init,然后调用 [super init]。在这种情况下,似乎 initWithCoder 是指定的 init
    • initWithCoder: 是任何实现 NSCoding 的类的指定初始化器。
    【解决方案2】:

    我相信是awakeFromNib

    【讨论】:

    • awakeFromNib 也被调用,因为我们的 UIViewControllers 被“封装”在您的 .storyboard 文件中(相当于“旧”笔尖)
    • awakeFromNibinit* 方法之间的区别(可能很重要)是它们返回一个实例,awakeFromNib 没有。
    【解决方案3】:

    - (id)initWithCoder:(NSCoder *)decoder

    因此,如果您必须进行自定义初始化,假设使用自定义寻呼机控制器,您必须像

        - (id)initWithCoder:(NSCoder *)decoder {
    
            self = [super initWithCoder:decoder];
            return [self initWithViewControllers:@[self.playerViewController, self.categoriesViewController]
                      andTitles:@[@"Player",@"Categories"]];
        }
    

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 2012-09-30
      • 2012-01-18
      • 1970-01-01
      • 2023-03-05
      • 2011-11-15
      • 1970-01-01
      • 2013-02-04
      • 2011-12-01
      相关资源
      最近更新 更多