2010-10-21 13 views

Odpowiedz

2

z dokumentacji Apple:

InitWithCoder koduje obiekt do archiwizacji. Koder instruuje obiekt, aby to zrobić, wywołując encodeWithCoder: lub initWithCoder :. encodeWithCoder: nakazuje obiektowi kodowanie jego zmiennych instancji do dostarczonego kodera ...

InitWithNibName Zwraca obiekt NSNib zainicjowany na pliku nib w określonym pakiecie. Po wczytaniu pliku nib obiekt NSNib używa mapy zasobów pakietu, aby zlokalizować dodatkowe zasoby, do których odwołuje się końcówka. Jeśli podano wartość zero dla parametru pakunku, obiekt NSNib szuka zamiast tego tych zasobów w pakiecie powiązanym z klasą właściciela pliku. Jeśli plik nib nie ma właściciela, obiekt NSNib szuka dodatkowych zasobów w głównym pakiecie aplikacji.

To pierwsze służy do kodowania pojedynczych obiektów w kodzie, drugie służy do pobierania pliku NSNib zawierającego obiekty zasobów.

5

initWithNibName: jest zwykle używany z obiektem kontrolera widoku. Chodzi o to, że masz plik NIB (lub XIB, to samo), który ma już UIView (lub NSView), który już zaprojektowałeś w Konstruktorze interfejsów. Po uruchomieniu kontrolera widoku ma on własność i punkt sprzedaży, który musiałbyś narysować samodzielnie - z wyjątkiem tego, że zaprojektowałeś ją już w IB. Tak więc ten konstruktor umożliwia wystrzelenie nowego obiektu kontrolera i informuje go, w którym pliku NIB szukać jego widoku. Dyskusja na temat okablowania twojego NIB, aby upewnić się, że to się udało, jest nieco poza tematem tutaj.

initWithCoder: ma zupełnie inne zadanie. Kiedy serializujesz obiekt przy użyciu encodeWithCoder:, będziesz musiał ostatecznie odserializować (lub "odkodować") dane, aby z powrotem przekształcić je w obiekt twojej klasy.

W każdym razie, aby podsumować: Zaimplementowałbyś encodeWithCoder: i initWithCoder: na swojej klasie, tylko jeśli chciałbyś, aby Twój obiekt obsługiwał protokół NSCoding. Używasz initWithNibName: (zazwyczaj nie implementujesz go samodzielnie), gdy chcesz uruchomić obiekt, który może zainicjować jego właściwości z obiektami zarchiwizowanymi w pliku NIB.

Istnieje naprawdę wielki przegląd NSCodingover here.

+1

ah, wygląda jak Jordan już przybity, poniżej ;-) –

1

Storyboard

powinny Wolisz -initWithCoder: do -initWithNibName ponieważ tylko pierwsza jest wywoływana podczas ładowania widok z Storyboard.