Czy ktoś może mi wyjaśnić, kiedy używać initWithNibName i kiedy używać initWithCoder?Różnica między initWithNibName i initWithCoder
Odpowiedz
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.
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 NSCoding
over here.
Storyboard
powinny Wolisz -initWithCoder:
do -initWithNibName
ponieważ tylko pierwsza jest wywoływana podczas ładowania widok z Storyboard.
- 1. UIViewController (init i initWithNibName)
- 2. Jaka jest różnica między addChildViewController i presentModelViewController
- 3. Metoda initWithNibName w scenorysie
- 4. Różnica między unwrapObservable i()
- 5. Różnica między "**/* /" i "** /"?
- 6. Różnica między | = i^= css
- 7. Composer.phar różnica między | i ||
- 8. Różnica między "% ~ dp0" i ". \"?
- 9. Różnica między ". +" I ". +?"
- 10. MySQL: Różnica między ",", "i"
- 11. Różnica między (++ i) oraz (i ++)
- 12. Różnica kręgosłupa Różnica między CompositeView i CollectionView?
- 13. Użycie zatrzymania w initWithCoder?
- 14. initWithCoder: niewidoczny w NSObject?
- 15. Przesyłanie parametrów za pomocą initWithNibName:
- 16. Różnica między logger.info i logger.debug
- 17. Różnica między fgets i fscanf?
- 18. Różnica między NSLog i DLog
- 19. Różnica między RoutedEventHandler i EventHandler
- 20. Różnica między obrysem i wypełnieniem?
- 21. Różnica między Parameters.Add i Parameters.AddWithValue
- 22. Różnica między putback() i unget()
- 23. Różnica między Delegate.BeginInvoke i Thread.Start
- 24. Różnica między TVar i TMVar
- 25. Różnica między DatagramSocket i DatagramChannel
- 26. Różnica między intent.setClass() i intent.setComponent()
- 27. różnica między -lgcc_s i gcc
- 28. Różnica między string.ToLower i TextInfo.ToLower
- 29. Różnica między javax.sql i java.sql?
- 30. Różnica między paint() i paintcomponent()?
ah, wygląda jak Jordan już przybity, poniżej ;-) –