NSWindowController Klärung des Verständnisses

Habe ich verwendet NSWindowController in Projekten mehrere Male und fühle mich wie ich haben eine (sehr)groben Einblick in die Konzepte, die hinter dieser wichtigen Klasse. Was möchte ich mit diesem post zu tun, ist zu klären/korrigieren meinem eigenen Verständnis, und hoffentlich helfen Sie anderen Lernenden bekommen, dass der erste Schritt zum Verständnis. Es ist die auf einen Blick Konzepte, überblick und best practices, die ich finden ist äußerst nützlich, und oft fehlen in der Dokumentation. Hier ist mein nehmen auf NSWindowController (Fragen eingestreut sind Fett hervorgehoben):

  • Eine NSWindowController (NSWC) Unterklasse vorhanden ist (begrifflich) nur unter jedem Fenster-Feder, die als Kleber zwischen die Elemente der Benutzeroberfläche und den Modell-Objekten, die Sie Steuern/darstellen. Im Grunde, jedes Fenster in Ihrer Anwendung sollte mit einem eigenen NSWC Unterklasse.
  • Der File ' s Owner der nib-sollte immer die NSWC-Unterklasse. Ist dies der Fall, auch für das Hauptmenü.xib-Anwendung?
  • Die NSWC window Eigenschaft sollte immer im Zusammenhang mit der NSWindow im InterfaceBuilder.
  • Sollten Sie überschreiben der "init" - Methode, mit [super initWithWindowNibName:], so dass, wenn Sie beziehen sich auf [mycontroller window] es wird das laden der nib. Sollte dies auch der Fall für die NSWC für das MainMenu.xib-Fenster, obwohl dieses beim Start geöffnet?
  • Die NSWC sollte nicht zu viel zu tun schweres heben - es sollte einfach passieren Nachrichten an Instanzen der Objekte, und diese Objekte in der Benutzeroberfläche.
  • Es kann ändern Sie die Benutzeroberfläche mit Bindung, oder die Tätigkeit als Delegierter für die Tabellen etc., oder indem Sie selbst aktiv die änderung der UI-Elemente, wenn es beobachtet, eine änderung oder eine Kombination von einer der oben genannten (welche Sie verwenden, zu sein scheint eine Frage des Geschmacks, mit vor-und Nachteile auf allen Seiten).
  • Eine NSWC können erstellen von Instanzen anderer NSWCs, wenn nötig (beispielsweise, wenn die Eröffnung eines "one-off" sub-Fenster).
  • Verwenden Sie die [mycontroller showWindow:nil] - display, um die zugehörigen Fenster an der Vorderseite. Wenn Sie möchten, dass das Fenster zu erscheinen, wie ein Blatt, verwenden Sie so etwas wie:

    NSWindowController* mycontroller = [[MyController alloc] init];
    [NSApp beginSheet: [mycontroller window]
       modalForWindow: [self window] 
        modalDelegate: self 
       didEndSelector: @selector(didEndMySheet:returnCode:contextInfo:)
          contextInfo: nil];

Den didEndSelector: sollte eine Methode des NSWC des übergeordneten Fensters, und können den Zugriff und Veröffentlichung 'mycontroller' mit [sheet windowController].
- Schließen Sie das Fenster durch Aufruf der performClose: Methode der NSWC-Fenster.

Einige Fragen:

  • Sollte die NSWC des Hauptmenü-Fensters auch die Anwendung delegieren, oder sollte das eine andere Klasse?
  • In die gleiche Richtung, sollten die wichtigsten NSWC-handle-Dateien (drag/drop und Eröffnung), oder sollte es weitergegeben werden, um die app zu delegieren, oder ist das nur eine Frage des Geschmacks?

Bitte korrigieren Sie mich, ist dies eine schlechte Praxis, oder ist schlicht und einfach falsch. Ich bin auf der Suche um zu klären, mein Verständnis von NSWindowController, also Ergänzungen (in form von best practices, Erfahrungen, Fallstricke) würde sehr geschätzt werden.

Dank,
Laurie

InformationsquelleAutor Loz | 2010-09-10
Schreibe einen Kommentar