Antwort

1

Es hat mit Schlüssel-Wert-Codierung zu tun. Sie können ein Steuerelement in IB an einen Wert in Ihrem Controller binden. Um diesen Wert zu verbinden, müssen Sie den Schlüsselpfad angeben. Wenn Sie beispielsweise ein Textfeld in IB haben und es an ein Feld namens "name" in Ihrem Controller binden möchten, würden Sie "name" als Schlüsselpfad angeben. Sie müssen dann Ihr Namensfeld in Ihrem Controller so einrichten, dass es durch Schlüsselwert-Codierung zugänglich ist. Dies geschieht in 10.5 mit den @property- und @ synthesize-Spezifizierern.

4

Mit dem Einblendmenü "Controller Key" können Sie herausfinden, welche Schlüssel der Controller (normalerweise ein NSArrayController, NSObjectController oder ein NSTreeController) darstellt.

Das beste Beispiel ist der Schlüssel selection von NSArrayControllers, der die Menge ausgewählter Objekte enthält. Was verwirrend ist, ist, dass der NSObjectController auch einen 'Auswahl'-Schlüssel präsentiert, obwohl der Controller nur ein einzelnes Objekt steuern kann (daher die Auswahl = das Objekt).

Ich stimme zu, dass es überhaupt nicht klar ist. Persönlich begann ich es zu verstehen, als ich meine Objekte programmatisch band (d. H. Mit der bind:toObject:withKeyPath:options: Methode).

4

[Kopieren my answer on another question ...]

Der Controller Schlüssel ist der Schlüssel für die (Eigenschaft des Controller-Objekt) Sie sind verbindlich. 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

Dave Gallagher: Eigentlich nicht. Bei beiden Beispielen handelt es sich um eine einzelne Tabellenansicht mit Personenobjekten. Das vorherige Beispiel hat diese als die oberste Ebene des Modells; Im letzteren Beispiel sind alle Personen nur über Abteilungen erreichbar.Die zwei Beispiele zeigen, dass die gleiche einzelne Liste für beide Modelle leicht mit Bindings implementiert werden kann. –