为什么我的awakeFromNib火?(Why won't my awakeFromNib

2019-08-20 10:45发布

我开始更多的我的看法层次构造的移动到IB。

我有一个名为“AlignmentViewController.xib”笔尖文件,在其中设置我的视图层次与AlignmentViewController作为文件的所有者。 这工作得很好。

其中一个我仍然模糊的方法是awakeFromNib。 在AlignmentViewController的跟踪代码片段我添加了单个附加方法awakeFromNib。 但是,它不会被调用:

- (void)awakeFromNib {

   NSLog(@"AlignmentViewController - awakeFromNib");
   [super awakeFromNib];

}

- (id)initWithChromosomeName:(NSString *)chromosomeName 
               basepairStart:(NSUInteger)basepairStart 
                 basepairEnd:(NSUInteger)basepairEnd {

    self = [self initWithNibName:@"AlignmentViewController" bundle:nil];

    if (nil != self) {


        self.title          = @"Alignment";

        self.chromosomeName = chromosomeName;
        self.basepairStart  = basepairStart;
        self.basepairEnd    = basepairEnd;

        self.wantsFullScreenLayout = YES;

    }

    return self;
}

可有人阐明我什么,我已经在这里错过了什么?

欢呼声,道格

更新:读一些我意识到我需要得到的东西的底部,这是非常基本的答案后。

纵观初始化:

- (id)initWithChromosomeName:(NSString *)chromosomeName 
               basepairStart:(NSUInteger)basepairStart 
                 basepairEnd:(NSUInteger)basepairEnd {

    self = [self initWithNibName:@"AlignmentViewController" bundle:nil];

我注意到我打电话initWithNibName:包:间接。 这是不好的做法? 该AlignmentViewController.xib文件定义了我的看法层次。 但我真的不使用initWithNibName:包:在典型的方法是什么? 有一个更好的方法吗?

Answer 1:

-awakeFromNib被发送到从笔尖实例化的笔尖对象已实例化后,所有的对象。 主人不在的对象之一。 之前反序列化笔尖它存在并布线连接至加载后笔尖,因此它不发送-awakeFromNib (当然,除非它是由一些其他笔尖本身实例化)。

这里的一个线索是,有没有办法既-initFromChromosomePair:basepairStart:basepairEnd:-awakeFromNib可以都调用。 笔尖装载机总是调用-initWithCoder: -initWithFrame:-init (发送的规则这是在笔尖对象的生命周期 )。 你有一些其他指定初始化的事实有力地表明,你是手动的代码,这意味着这个对象没有地方创建这个对象“从笔尖唤醒。”



Answer 2:

只要添加一个澄清:-awakeFromNib发送到文件的所有者在可可,但不是可可触摸。

从苹果公司的文档:

...

  • 它发送一个awakeFromNib消息中定义的匹配选择笔尖文件中的相应对象:
    • 在Mac OS X,该消息被发送到定义该方法的任何接口对象。 它还发送到文件的所有者,并且将其定义以及任何代理对象。
    • 在iPhone OS,仅发送到由笔尖加载代码实例化的接口对象此消息。 它不会被发送到文件的所有者,第一响应者,或任何其他代理对象。


Answer 3:

基于你告诉我们,我相信我知道你的问题是什么。 awakeFromNib当一个对象从笔尖文件反序列被调用。 在这里,你有一个对象,它是主人,笔尖加载之前存在。 因此awakeFromNib永远不会被发送到您的AlignmentViewController.h

如果你需要在这里做一些事情,请尝试使用loadView代替。 或者只是做它加载笔尖后。 它是什么,你搭售做你想做的事它awakeFromNib



文章来源: Why won't my awakeFromNib fire?