Nicolas Roy Nicolas Roy - 4 months ago 12
iOS Question

All my IBOutlet are nil in viewDidLoad

I've created a

UIViewController
that we can call
MyViewController1
. When I call
MyViewController1
, all my
IBOutlet
are nil in
viewDidLoad
(and in the rest of the code too).

When I create this controller by doing

MyViewController1 *vc = [[MyViewController1 alloc] init]
,

if I replace
MyViewController1
by an other one, for example
MyViewController2
, it works. So I guess the problem is really in
MyViewController1
.

Last thing you might want to know, is that
MyViewController1
is actually a subclass of
MySuperViewController1
that is a
UIViewController
.

Thanks for your help !




EDIT

I realized my case was maybe more complicated. Here are my exact files :

// MySuperViewController1

MySuperViewController1.h

MySuperViewController1.m

MySuperViewController1.xib


// MyViewController1

MyViewController1.h

MyViewController1.m


So the nib belongs to the superclass, and not the subclass. Can I do that ?

Answer

You should probably use :

MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MyViewController1" bundle:nil]

calling init won't do the match with your xib file and won't alloc your differents IBOutlet

EDIT :

There are two possibles solutions :

First is calling init with super nibName :

MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MySUperViewController1" bundle:nil]

The second is calling the super initWithNibName: in child init method :

-(id)init {
   if (self = [super initWithNibName:@"MySuperViewController1" bundle:nil]) {
        // Init
   }
   return self;
}