2010-10-21 12 views

risposta

2

Dalla documentazione di Apple:

InitWithCoder codifica un oggetto per l'archiviazione. Un coder ordina all'oggetto di farlo invocando encodeWithCoder: o initWithCoder :. encodeWithCoder: indica all'oggetto di codificare le sue variabili di istanza al codificatore fornito ...

InitWithNibName Restituisce un oggetto NSNib inizializzato nel file pennino nel bundle specificato. Dopo che il file del pennino è stato caricato, l'oggetto NSNib utilizza la mappa delle risorse del bundle per individuare ulteriori risorse a cui fa riferimento il pennino. Se è stato specificato nil per il parametro bundle, l'oggetto NSNib cerca invece quelle risorse nel bundle associato alla classe del proprietario del file del pennino. Se il file pennino non ha un proprietario, l'oggetto NSNib cerca risorse aggiuntive nel pacchetto principale dell'applicazione.

Il primo viene utilizzato per la codifica di singoli oggetti nel codice, quest'ultimo viene utilizzato per recuperare un file NSNib contenente oggetti risorsa.

5

initWithNibName: viene in genere utilizzato con un oggetto controller di visualizzazione. L'idea è di avere un file NIB (o XIB, stessa cosa) che ha un UIView (o NSView) che hai già progettato in Interface Builder. Quando il tuo controller di visualizzazione si avvia, ha una proprietà view che dovresti disegnare tu stesso - tranne che lo hai già progettato in IB. Quindi questo costruttore ti permette di aprire il nuovo oggetto controller e dice in quale file NIB cercare la sua vista. La discussione sul cablaggio della NIB stessa per assicurarsi che questo abbia successo è un po 'oltre l'argomento qui.

initWithCoder: ha un altro compito. Quando hai serializzato un oggetto usando encodeWithCoder:, alla fine avrai bisogno di unserializzare (o "decodificare") quei dati per trasformarli in un oggetto della tua classe.

In ogni caso, per ricapitolare: implementereste encodeWithCoder: e initWithCoder: nella vostra classe solo se desiderate che il vostro oggetto supporti il ​​protocollo NSCoding. Si utilizza initWithNibName: (in genere non lo si implementa da soli) quando si desidera attivare un oggetto che può inizializzare le sue proprietà con oggetti archiviati in un file NIB.

C'è una fantastica panoramica di NSCodingover here.

+1

ah, sembra che Jordan lo abbia già inchiodato, sotto ;-) –

1

Storyboard

si dovrebbe preferire -initWithCoder: al -initWithNibName dal momento che il primo è invocato solo quando il caricamento di una vista da Storyboard.