问题
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.
回答1:
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.
回答2:
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
}
来源:https://stackoverflow.com/questions/6942152/why-does-the-init-method-of-a-custom-nib-based-table-cell-not-get-called