2012-02-20 13 views
6

Domyślna init metoda podpis na Xcode generowane widok kontrolerów:Co naprawdę oznacza nibNameOrNil?

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ } 

Widziałem te inicjowane z obu wartości dostarczone, tylko nazwa NIB (z pakietu jako zero), lub po prostu nil jako oba. Wszystko wydaje się działać.

W jaki sposób UIViewController naprawdę obsługuje self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];? Czy w obu wartościach występuje jedna z wad?

Odpowiedz

9

Po wpisaniu nil jako nazwy końcówki, metoda będzie szukać końcówki z taką samą nazwą pliku, jak kontroler widoku.

Na przykład, jeśli masz kontroler widoku o nazwie MyViewController, będzie on szukał pliku nib MyViewController.xib.

Jeśli nie znaleziono stalówki, należy zastąpić metodę loadView, aby utworzyć i przypisać UIView do widoku widoku kontrolera.

- (void)loadView 
{ 
    UIView *theView = [[UIView alloc] ... 
    // Setup the main view 
    self.view = theView; 
} 
+0

Dokładnie to, czego szukałem. Dzięki! – Tim

1

Z docs:

nibName:

Jeśli podasz zero dla parametru nibName a nie zastąpić metodę loadview wyszukuje widok kontroler dla pliku nib przy użyciu innych znaczy. Zobacz nibName.

nibBundle:

Pakiet w których szukać pliku nib. Ta metoda wyszukuje najpierw plik końcówki w katalogach specyficznych dla języka pakietu, a następnie katalog Zasoby. Jeśli nie, ta metoda wyszukuje plik nib w pakiecie głównym.