Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why does the init-method of a custom nib-based table cell not get called

I have a nib-based table view cell which I created in Interface builder. I set the class of the table view cell to FooTableViewCell which extends from UITableViewCell.

In FooTableViewCell I override the init method like this:

-(id)init{

    if ((self = [super init])){
      // My init code here
    }
    return self;
}

I now expected that my gets called, when it is being instantiated. However the table view gets displayed but the method is never called.

I could work around this but I would like to fully understand it and for me it's not clear how an object can come to live without the init method being called.

like image 730
Besi Avatar asked Aug 04 '11 13:08

Besi


2 Answers

When being unarchived initialization goes through a slightly different path.

Instead of -(id)init being called -(id)initWithCoder:(NSCoder*)aDecoder will be called. At this point outlets aren't hooked up, if you need access to the outlets you can override -(void)awakeFromNib which will be called after the object has been hooked up.

like image 160
Joshua Weinberg Avatar answered Sep 23 '22 23:09

Joshua Weinberg


When object is being loaded from nib file then its -awakeFromNib method is called - you can put your initialisation code there:

- (void)awakeFromNib{
   // Init code
}
like image 30
Vladimir Avatar answered Sep 21 '22 23:09

Vladimir