9

Wenn ich ein Steuerelement mithilfe von Interface Builder an einen NSArrayController binde, gibt es eine Vielzahl von Optionen unter dem Feld "Controller Key" im Bindungsinspektor.Cocoa Key Value Bindings: Was sind die Erklärungen der verschiedenen Optionen für Controller Key?

Ich verstehe, was "arrangedObjects" ist, und ich verstehe halb, was "Auswahl" ist, aber ich würde gerne sehen, eine wirklich schöne Erklärung aller Optionen und wann zu verwenden. Die Liste enthält: selectionIndexes, selectionIndex, selectedObject, sortDescriptors usw. Ich konnte keine gute Erklärung für diese Optionen finden.

Ich habe Probleme mit einer Schaltfläche, die an die Zielauswahl gebunden ist, also hoffe ich, dass ein viel tieferes Verständnis dieser Controller-Schlüssel mir helfen könnte, mein Problem zu debuggen.

Danke !!!

Antwort

12

Diese sind schwierig zu finden. Sie scheinen überall von verschiedenen Cocoa-Büchern und sogar Apples Dokumenten referenziert zu sein, aber ich habe niemanden gesehen, der eine Erklärung von ihnen an einem einzigen Ort vereinheitlicht hat.Die Antwort ist, Apfel ihnen in der Dokumentation für jeden Controller-Klasse definiert:

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

Diese Dokumente sind auch nützlich:

Vererbung für diese "Controller" Objekte sieht so aus (das ist wichtig zu entdecken, wo einige der "Controller-Key" Optionen kommen aus):

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. 

Wenn Sie einen Controller Key nicht in den Dokumenten für eine bestimmte Klasse definiert finden, ist es wahrscheinlich in seiner Oberklasse definiert. Im Folgenden alle Controller-Keys für jede der oben zur Verfügung stehen (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 

So finden Sie die auf der Liste, die Sie wollen, für diesen Controller in der Dokumentation suchen Klasse, und Sie werden seine Definition finden. Wenn es nicht dort ist, ist es wahrscheinlich in den Dokumenten für seine Oberklasse (wahrscheinlich NSObjectController) definiert.

+1

Danke Dave, das ist sehr hilfreich! – Elisabeth

+0

Sie sind mehr als willkommen! Auch hier ist eine andere Frage ähnlich der, die auch einige gute Antworten darin hat: http://stackoverflow.com/questions/595257/what-does-controller-key-mean-in-interface-builder-inspector-bindings/2440523 –

7

Der Controller-Schlüssel ist der Schlüssel für die (Eigenschaft des Controller-Objekts), an die Sie gebunden sind. Der Modellschlüsselpfad ist der Schlüsselpfad, über den das gebundene Objekt die Modellobjekte nach grundlegenderen Objekten wie Strings oder Bildern oder nach anderen Modellobjekten fragen kann (d. H. Nach einem Drilldown in das Modell).

Ein Beispiel: Nehmen wir an, Sie haben eine Person-Objekte in einem Array-Controller und jede Person hat eine name. Sie binden eine Tabellenspalte an den Array-Controller, Controller-Schlüssel arrangedObjects (wodurch die Modellobjekte abgerufen werden), Modellschlüsselpfad name (wodurch die Wertobjekte abgerufen werden).

Ein komplexeres Beispiel: Angenommen, Sie haben einen Array-Controller von Abteilungen. Jede Abteilung enthält Personen (Mitarbeiter in der Abteilung). Sie können Ihren People-Array-Controller an den Departments-Controller, den Controller-Schlüssel arrangedObjects (Abrufen der Abteilungsmodellobjekte), den Modellschlüsselpfad (Abrufen der Personenmodellobjekte) und anschließend eine Tabellenspalte an den People-Controller binden, Controller-Schlüssel arrangedObjects. Modellschlüsselpfad name.

Dieser Tisch wäre für Leute, die für Ihr Unternehmen arbeiten; Wenn Sie eine separate Tabelle von prospektiven Mitarbeitern haben, können Sie auch Personenobjekte für sie erstellen, und sie werden nicht in der Tabelle vorhandener Mitarbeiter angezeigt, da sie sich nicht in einer Abteilung befinden. Wenn Sie sie anstellen, fügen Sie sie einer oder mehreren Abteilungen hinzu. Dann werden sie automatisch im People-Array-Controller angezeigt, da dieser Array-Controller die employees aller Abteilungen beobachtet.

+0

Ich frage mich nur. Ich denke, dass Controller und Modell tatsächlich nur Modelle sind. Warum ist der Unterschied? – onmyway133

2

Werfen Sie einen Blick auf die Interface Builder User Guide gibt es einen Abschnitt „Anschluss und Bindungen“ mit einer Tabelle 7-1, in dem es heißt:

Controller-Key: Ein Attribut eines NSController Objekt. Wenn Sie ein NSController-Objekt an binden, verwenden Sie dieses Feld , um den ersten Eintrag im Schlüsselpfad auszuwählen. Das Menü, das mit diesem Feld verknüpft ist, zeigt die Eigenschaften an, die auf dem ausgewählten Controller Objekt als Annehmlichkeit verfügbar sind. Sie können den Namen der Eigenschaft eingeben oder einfach wählen Sie es aus der bereitgestellten Liste.

Verwandte Themen