2013-03-06 16 views
27

Sono nuovo di Cocoa e non capisco il concetto di File's Owner di un file .nib.Qual è il proprietario del file (nel generatore di interfaccia)?

Qui è il modo vorrei vedere le cose:

  • consideri un myNibFile.nib file che descrive come appare una finestra.

  • Ora, voglio collegare una finestra effettiva a questo file .nib. Quindi, creo una classe myWindow, che è una sottoclasse di NSWindowController. E, per fare questo collegamento, a cambiare il metodo init in questo modo:

     -(id)init 
        { 
         [super initWithWindowNibName:@"myNibFile"]; 
         return self; 
        } 
    

Così, ho capito che quando creo un'istanza myWindow, il "sistema" sarà andare a vedere il pennino file e creare l'oggetto adeguato.

Quindi, la mia domanda sono:

  • Perché devo precisare che l'File's Owner del mio file pennino è myWindow? Non è ridondante?

  • Immagino che non abbia davvero capito cosa sia lo File's Owner. Che cos'è ? Perché il file .nib deve appartenere a qualcosa? Non può essere "da qualche parte" nella mia "domanda" e quando è necessario, il "sistema" va lì e lo usa?

Grazie per avermi aiutato a vedere più chiaramente in questi nuovi concetti!

risposta

41

due punti da ricordare:

  • Il proprietario del file è l'oggetto che carica il pennino, vale a dire che l'oggetto che riceve il messaggio loadNibNamed: o initWithNibName:.
  • Se si desidera accedere a qualsiasi oggetto nel pennino dopo averlo caricato, è possibile impostare una presa nel proprietario del file.

Così avete creato una vista di fantasia con un sacco di pulsanti, sottoview ecc. Se si desidera modificare una di queste viste/oggetti in qualsiasi momento dopo aver caricato il pennino dall'oggetto di caricamento (di solito una vista o un controller di finestra) si impostano le prese per questi oggetti sul proprietario del file. È così semplice.

Questo è il motivo per cui per default tutte View Controller o Controller finestra agiscono come proprietari dei file, e hanno anche uno sbocco alla finestra principale o vista oggetto nel file Pennino: perché duh, se si sta controllando qualcosa che si' Avremo sicuramente bisogno di avere uno sbocco per poter inviare messaggi ad esso.

Il motivo per cui viene chiamato proprietario di file e dato un posto speciale, è perché a differenza degli altri oggetti nel pennino, il proprietario del file è esterno al pennino e non ne fa parte. Di fatto, diventa disponibile solo quando il pennino viene caricato. Quindi il proprietario del file è un sostituto o un proxy per l'oggetto reale che in seguito caricherà il pennino.

Spero che tu abbia capito. Chiarirò tutti i punti se lo chiedi.

+0

Grazie per la risposta. L'ultimo paragrafo è il più importante per me: il proprietario del file non fa parte del pennino. La risposta "occorrono punti vendita ..." non è valida per me perché gli outlets possono appartenere a un oggetto aggiunto a NIB. La mia idea è che si possa collegare (e in realtà * deve *) un oggetto e un NIB tramite il codice ('loadNibNamed', ecc.) E in modo che non sia necessario il link ridondante' File's Owner' è vero ma allora: come farai per collegare le prese a questo oggetto? Tu rispondi a questo punto. – Colas

+0

Stavo aspettando una risposta soddisfacente! Forse potresti riorganizzare la tua risposta per enfatizzare l'ultimo paragrafo. Grazie. Spero che il mio ultimo commento sia chiaro. – Colas

1

Il proprietario del file è un segnaposto in IB, quindi tutte le prese e le azioni nel codice sono "collegabili" in IB, puoi controllare e trascinare per collegare elementi sullo schermo al codice.

0

Il proprietario del file in Interface Builder è in grado di conoscere il tipo di oggetto del genitore. Questo è usato in due modi. Innanzitutto, in Interface Builder in modo che IB sappia quali prese e azioni sono disponibili per la connessione. In secondo luogo, viene utilizzato dal framework dell'applicazione per sapere come ricollegare le cose al resto del codice una volta caricato il file pennino.

5

La cosa fondamentale da capire è che Interface Builder consente di creare oggetti collegati automaticamente tra loro, senza alcuno sforzo da parte del programma. È possibile creare un'istanza di tutti i tipi di oggetti, compresi quelli senza vista, e possono essere correlati tra loro; ad esempio, è possibile creare l'istanza di un'origine dati di visualizzazione tabella insieme alla vista stessa, ecc. Questo meccanismo viene comunemente utilizzato per creare un delegato dell'applicazione all'interno del menu principale NIB.

Tuttavia, poiché tutto avviene tramite il trascinamento &, sembra che non sia possibile creare una connessione tra nessuno degli oggetti NIB e gli oggetti già presenti nell'applicazione, con un'eccezione.

Quando il codice sta caricando il file NIB, è possibile specificare esattamente un oggetto che NIB considererà il "Proprietario file". Questo è il segnaposto che vedi all'interno di Interface Builder; poiché può rappresentare qualsiasi oggetto all'interno dell'applicazione, Interface Builder non può sapere quali azioni/uscite sono disponibili su di esso.Questo è il motivo per cui è possibile modificare la "classe" del proprietario dei file, nella scheda Attributi.

Il proprietario di file in realtà non rappresenta "proprietà" o "genitorialità". Ciò che rappresenta è "l'oggetto che ha caricato questo NIB".

+1

Non riesco ancora a capire, dal momento che come faccio a chiamare NIB dal mio programma è con 'initWithWindowNibName: @" myNibFile "'. Con questa istruzione, creo la connessione tra NIB e altri oggetti. – Colas

Problemi correlati