Tengo una subclase UITableViewController
que se crea una instancia, dependiendo de dónde se utiliza, en un NIB o mediante un código. En ambos casos, quiero hacer personalización en el método de inicialización. ¿Significa eso que necesito implementar initWithNibName:bundle:
yinitWithCoder:
, y cada método llamaría a su superinicializador?Qué inicializador (s) anular para la subclase UITableViewController
Si bien no necesito esto ahora, ¿qué sucede si también quiero poder crear una instancia del controlador de vista con initWithStyle:
? ¿Necesitaría entonces 3 métodos de inicio diferentes que reproduzcan el mismo comportamiento?
Parece que esto viola toda la convención de inicializador designada, ya que básicamente habría 3 inicializadores separados que no terminan llamando a un método init común. ¿O hay una forma de crear un inicializador designado común mientras se soportan las 3 rutas de creación de instancias diferentes?
Eso no es exacto. - [UIViewController initWithCoder:] parece invocar - [UIViewController initWithNibName: bundle:]. No hay necesidad de anularlo. Sigue los consejos de KennyTM. – fnf
es exacto. Tengo una situación donde solo se invoca initWithCoder. (Tengo todos los 3 métodos anulados). – Sam
Lo que realmente confunde en iOS8 es que initWithStyle: llama a initWithNibName: bundle: y ambos tienen que declararse como inicializadores designados. Esto no se ajusta a las reglas rápidas de inicialización. En iOS8, si no define initWithNibName: bundle: y llama a initWithStyle :, la aplicación se bloquea. Esto ha sido arreglado en iOS9. –