Mam UITableViewController
podklasę, która jest instancję, w zależności od tego, gdzie jest to stosowane, w NIB lub za pomocą kodu. W obu przypadkach chcę dokonać personalizacji w metodzie inicjalizującej. Czy to znaczy, że trzeba zaimplementować zarówno initWithNibName:bundle:
iinitWithCoder:
i nazwałbym każdy sposób jej odpowiedni super-inicjator?Która inicjatora (ów) przesłonić dla UITableViewController podklasy
Chociaż teraz nie potrzebuję tego, co zrobić, jeśli chcę mieć możliwość utworzenia instancji kontrolera widoku za pomocą initWithStyle:
? Czy potrzebowałbym 3 różnych metod inicjowania, które powielałyby to samo zachowanie?
Wydaje się, że to narusza konwencję cały wyznaczony inicjalizator, ponieważ nie byłaby zasadniczo 3 oddzielne inicjalizatory że nie kończy się wywołaniem wspólną metodę init. A może istnieje sposób na stworzenie wspólnego inicjalizatora z 3 różnymi ścieżkami?
To nie jest dokładne. - [UIViewController initWithCoder:] wydaje się wywoływać - [UIViewController initWithNibName: bundle:]. Nie trzeba go przesłonić. Postępuj zgodnie z radą KennyTM. – fnf
jest dokładne. Mam sytuację, w której wywoływany jest tylko initWithCoder. (Mam zastąpione wszystkie 3 metody). – Sam
Co jest naprawdę mylące na iOS8 to, że initWithStyle: wywołuje initWithNibName: bundle: i oba muszą być zadeklarowane jako wyznaczone inicjatory. Nie jest to zgodne z szybkimi regułami inicjalizatora. W systemie iOS 8, jeśli nie zdefiniujesz initWithNibName: bundle: i wywołaj initWithStyle :, aplikacja ulega awarii. Zostało to naprawione na iOS9. –