9

Quando collego un controllo a un NSArrayController usando Interface Builder, ci sono varie opzioni sotto il campo "Chiave del controllore" nell'ispettore dei bind.Collegamenti valore chiave cacao: quali sono le spiegazioni delle varie opzioni per la chiave del controller?

Capisco cosa sia "arrangedObjects", e io capisco cosa sia la "selezione", ma mi piacerebbe vedere una spiegazione davvero bella di tutte le opzioni e quando usarle. L'elenco include: selectionIndexes, selectionIndex, selectedObject, sortDescriptors, ecc. Non sono riuscito a trovare una buona spiegazione di queste opzioni.

Ho problemi con un pulsante che è destinato alla selezione del target, quindi spero che una comprensione più approfondita di questi tasti Controller possa aiutarmi a eseguire il debug del mio problema.

Grazie !!!

risposta

12

Questi sono difficili da trovare. Sembrano essere referenziati ovunque da vari libri di Cocoa e perfino dai documenti di Apple, ma non ho visto nessuno unificare una spiegazione di loro in un'unica posizione.La risposta è, Apple li definisce all'interno la documentazione per ciascuna classe controllore:

  • NSObjectController (doc)
  • NSArrayController (doc)
  • NSDictionaryController (doc)
  • NSTreeController (doc)
  • NSUserDefaultsController (doc)

Questi documenti sono anche utili:

Ereditarietà per questi oggetti "controller" assomiglia in modo (questo è importante per scoprire dove alcune delle opzioni "Key Controller" provengono da):

NSController -> NSObjectController 
NSController -> NSObjectController -> NSArrayController 
NSController -> NSObjectController -> NSArrayController -> NSDictionaryController 
NSController -> NSObjectController -> NSTreeController 
NSController -> NSUserDefaultsController 

// Note: NSController is an abstract class (don't worry about it). It inherits from NSObject. 

Se si trova una chiave del controller non definita nei documenti per una particolare classe, è probabilmente definito nella sua superclasse. Di seguito sono riportati tutti i tasti del controller disponibili per ciascuno dei sopra (Xcode 3.2.1, Interface Builder 3.2.1):

// **NSObjectController** 
canAdd 
canRemove 
isEditable 
selectedObjects 
selection 


// **NSArrayController** 
arrangedObjects 
canAdd 
canInsert 
canRemove 
canSelectNext 
canSelectPrevious 
filterPredicate 
isEditable 
selectedObjects 
selection 
selectionIndex 
selectionIndexes 
sortDescriptors 


// **NSDictionaryController** 
arrangedObjects 
canAdd 
canInsert 
canRemove 
canSelectNext 
canSelectPrevious 
filterPredicate 
isEditable 
selectedObjects 
selection 
selectionIndex 
selectionIndexes 
sortDescriptors 


// **NSTreeController** 
arrangedObjects 
canAdd 
canAddChild 
canInsert 
canInsertChild 
canRemove 
isEditable 
selectedObjects 
selectedNodes 
selection 
selectionIndexPath 
selectionIndexPaths 
sortDescriptors 


// **NSUserDefaultsController** 
hasUnappliedChanges 
values 

Quindi, trovare quello della lista che si desidera, consultare la documentazione per il controller classe, e troverai la sua definizione. Se non è lì, è probabilmente definito nei documenti per la sua superclasse (probabilmente NSObjectController).

+1

Grazie Dave, questo è molto utile! – Elisabeth

+0

Sei più che benvenuto! Inoltre, ecco un'altra domanda simile a questa che ha anche alcune buone risposte: http://stackoverflow.com/questions/595257/what-does-controller-key-mean-in-interface-builder-inspector-bindings/2440523 –

7

La chiave del controller è la chiave per la (proprietà dell'oggetto controller) a cui si sta vincolando. Il percorso chiave del modello è il percorso chiave mediante il quale l'oggetto associato può chiedere agli oggetti del modello ulteriori oggetti di base, come stringhe o immagini o altri oggetti del modello (ad esempio, drill down nel modello).

Un esempio: Diciamo che avere oggetti una persona in un controller di array, e ogni persona ha un name. Si associa una colonna di tabella al controller di array, la chiave del controller arrangedObjects (ottenendo così gli oggetti del modello), il percorso della chiave del modello name (ottenendo così gli oggetti valore).

Un esempio più complesso: Supponiamo di avere un controller di array di dipartimenti. Ogni dipartimento contiene persone (dipendenti nel dipartimento). È possibile associare il controller persone array per il controller Dipartimenti, regolatore chiave di arrangedObjects (ottenere oggetti del modello Department), modello di percorso della chiave @distinctUnionOfObjects.employees (ottenere oggetti del modello persona), e quindi associare una colonna della tabella al controller persone, regolatore chiave di arrangedObjects, percorso chiave modello name.

Quel tavolo sarebbe per le persone che lavorano per la vostra azienda; se si dispone di una tabella separata di potenziali dipendenti, è possibile creare oggetti Person anche per loro e non verranno visualizzati nella tabella dei dipendenti esistenti perché non si trovano in un reparto. Quando li assumi, li aggiungi a uno o più dipartimenti; quindi, verranno visualizzati automaticamente nel controller di array People, poiché il controller di array sta osservando lo employees di tutti i reparti.

+0

Mi chiedo solo. Penso che controller e modello, in realtà, siano solo dei modelli. Perché la differenza? – onmyway133

2

Date un'occhiata al Interface Builder User Guide, c'è una sezione "Collegamento e Associazioni" con un tavolo da 7-1 in cui si legge:

chiave controller: Un attributo di un oggetto NSController . Quando si associa a un oggetto NSController, si utilizza questo campo per selezionare la prima voce nel percorso chiave . Il menu associato a in questo campo visualizza le proprietà disponibili sull'oggetto controller selezionato. È possibile digitare il nome della proprietà o semplicemente selezionarlo dall'elenco fornito.

Problemi correlati