2010-09-07 42 views
6

Ho bisogno di mettere qualche logica personalizzata nella mia app per iPhone in modo che, a seconda della versione di iOS in uso, scegli un file XIB diverso (ad esempio iPhone o iPad mostreranno diversi file XIB).initWithNibName non viene chiamato

Avevo costruito l'intera app per iPhone sin dal primo giorno e tutto sommato, utilizzando un tabollontroller e i controller di navigazione standard in ogni scheda.

Così ho implementato il: metodo di

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

, solo per scoprire che non venga chiamato. (Ho un breakpoint e le dichiarazioni del registro e niente viene colpito).

Qualcuno sa perché potrebbe essere? O come posso ottenere questa funzionalità?

Ho letto da qualche parte che initWithNibName viene chiamato solo quando lo chiami, cioè quando costruisci la tua gerarchia di viste in modo programmatico, è vero?

risposta

7

Se non stai facendo qualcosa di simile prima di aggiungerla al vostro controller di navigazione:

SomeViewController *someViewController = [[SomeViewController alloc] initWithNibName:...]; 

Allora ci sono buone probabilità che stai sovrascrivendo il metodo sbagliato.

Se il controller di visualizzazione è presente in un file di pennino, ad esempio il file del pennino del controller di navigazione, verrà rimosso dal file pennino come nuovo oggetto controller di visualizzazione, anziché essere creato con il proprio file pennino, quindi il metodo precedente non sarà chiamato.

È necessario sostituire invece -awakeFromNib.

+0

Ok, capisco, grazie, quindi come posso selezionare XIB da quel metodo? – Mark

+0

Cosa intendi selezionando lo xib? – BoltClock

+0

bene Voglio diversi file XIB a seconda se sto funzionando su iPad o iPhone, come potrei ottenere questo? – Mark

6

Se i controller di visualizzazione sono caricati da un file .xib, verrà chiamato invece initWithCoder:. Il metodo initWithNibName:bundle: viene utilizzato solo per in modo programmatico durante la creazione di controller di visualizzazione.

+0

ok, quindi come posso selezionare l'XIB da quel metodo? – Mark

Problemi correlati