iOS loadNibNamed zamieszanie, jaka jest najlepsza praktyka?

Jestem zaznajomiony z większością procesu tworzenia XIB dla mojej własnej podklasy UIView, ale nie wszystko działa poprawnie dla mnie - dotyczy to głównie łączenia IBOutlets. Mogę zmusić ich do pracy w sposób, który wydaje się okrężny.

Moje ustawienia to:

Mam MyClass.h i MyClass.m. Mają IBOutlets dla UIView (zwany widokiem) i UILabel (nazywany myLabel). Dodałem własność „view”, ponieważ niektóre przykłady online zdawały się sugerować, że tego potrzebujesz, a to rzeczywiście rozwiązało problem, w którym miałem awarię, ponieważ nie mógł znaleźć właściwości widoku, chyba nawet w klasie nadrzędnej UIView .Mam plik XIB o nazwie MyClass.xib, a jego niestandardową klasą właściciela pliku jest MyClass, która została poprawnie wypełniona po tym, jak moje .h i .m dla tej klasy istniały.

Moja metoda inicjowania polega na problemach.

Próbowałem użyć metody 'loadNibNamed' mainBundle NSBundle i ustawić właściciela na 'self', mając nadzieję, że utworzę instancję widoku i automatycznie dopasuję jej gniazda do tych w mojej klasie (wiem jak to zrobić i uważam z nim). Wtedy pomyślałem, że chciałbym uczynić „ja” równym podglądzie przy indeksie 0 w tej stalówce, zamiast robić

self = [super init];

lub coś takiego.

Wyczuwam, że robię tu źle, ale przykłady online mają podobne rzeczy w metodzie init, ale przypisują ten widok podrzędny 0 do właściwości widoku i dodają go jako dziecko - ale czy to nie jest suma dwie instancje MyClass? Jeden zasadniczo niepowiązany z IBOutlets, zawierający instancję potomną MyClass utworzoną przez loadNibNamed? Czy w najlepszym razie nie jest to instancja MyClass z dodatkowym pośrednim UIViewem zawierającym wszystkie IBOutlets, które pierwotnie chciałem jako bezpośrednie dzieci MyClass? Stwarza to niewielką irytację, jeśli chodzi o robienie rzeczy takich jak instanceOfMyClass.frame.size.width, ponieważ zwraca 0, gdy wprowadzony podrzędny UIView zwraca rzeczywisty rozmiar ramki, którego szukałem.

Czy to, co robię źle, to że mam kłopoty z loadNibNamed wewnątrz metody init? Czy powinienem robić coś takiego?

MyClass *instance = [[MyClass alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:instance options:nil];  

Czy tak?

MyClass *instance = [[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:nil options:nil] objectAtIndex:0]; 

Z góry dziękuję za pomoc.

questionAnswers(3)

yourAnswerToTheQuestion