Bindings->ArrayController->ObjectController->View

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bindings->ArrayController->ObjectController->View

    Hallo!

    Ich habe ein NSTableView, das an einen Array-Controller gebunden ist. Klickt der Benutzer auf einen Eintrag im NSTableView, soll, abhängig von Attributen des Entitys, aus vielen unterschiedlichen Views einer für die Eingabe gezeigt werden. Weil da eine ganze Menge umfangreicher Views mit Controllern zusammen kommen, muss ich das ganze in Nibs aufteilen:
    - Nib1: View "Liste" mit NSTableView mit NSArrayController
    - Nib2: View "Eingabe A" mit Feldern zum Eingeben, mit NSObjectController1
    - Nib3: View "Eingabe B" mit Feldern zum Eingeben, mit NSObjectController2
    - Nib4: View "Eingabe C",...usw.

    Vorteil: Ich kann alle Bindings im IB einrichten.

    Natürlich muß ich den NSObjectController zur Laufzeit an den NSArrayController via ContentObject -> bindto:NSArrayController ->Controller Key: selection binden.
    Nur: Model Key Path gibt's hier ja keinen. Das Problem ist aber: ohne Model Key Path zeigt der NSObjectController nur "No Selection".

    Ich habe einen Trick ausprobiert der funktioniert: Model Key Path = selber. "Selber" gibt im Model einfach self zurück.
    Ich frage mich nur: kann das sein, dass das "standardmäßig" nicht geht? Der "Model Key Path" ist lt. Anzeige im IB <optional>, das heißt doch, es müßte doch auch ohne gehen (?).

    Beispielanwendung ist anbei, mit und ohne Core Data...
    ... bzw. 49KB ist arg klein, deshalb hier die Datei:
    Beispiel

    No.
  • RE: Bindings->ArrayController->ObjectController->View

    Müsste so lauten:

    Quellcode

    1. [objectController bind:@"contentObject" toObject:theArrayController withKeyPath:@"selection" options:NULL];
    lauten. Ist jetzt aber aus dem Kopf.

    Du kannst aber auch gleich den File's Owner den Controller zurückgeben lassen und daran binden. So mache ich es.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Testhalber. Mir geht's darum auszuprobieren, wie ich vom NSArrayController zum NSObjectController und dort zum View binde.
    Für den Test habe ich mir das Programmieren gespart und deshalb alles in einem NIB gemacht. Ich bin bind:-mässig nicht so sattelfest und wollte dort nicht ggf. noch eine Fehlerquelle aufmachen.

    No.
  • Beide Controller liegen im NSDocument.nib meiner Testanwendung. Den NSObjectController habe ich an den NSArrayController via ContentObject - siehe vorheriges Bild - mit IB im selben Nib gebunden, wie gesagt, um mir das (bei mir fehleranfällige...) Erstellen des Bindings im Code zu vermeiden.

    Ein Screenshot des Document-Fensters ist noch anbei. Links mit "ganz normalen" Objekten, rechts mit NSManagedObjects. Das Verhalten ist aber gleich. Unterhalb von "Object Controller" sind je zwei Textfelder, die mittels NSObjectController gebunden sind. Alles andere ist - wie üblich - mit einem NSArrayController gebunden.

    No.
  • Ah, verstehe. Lass den Objekt-Controller weg. Der stiehlt dir den Pfad.

    Du kannnst mir das auch mal zumailen *UND* mich am Wochenende daran erinnern. Derzeit komme ich einfach nicht dazu.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ah, verstehe. Lass den Objekt-Controller weg. Der stiehlt dir den Pfad.

    In dieser Testanwendung: kein Problem
    Im realen Leben: muss ich das Ganze auf verschiedene Nibs aufteilen, weil der "Eingabe-View" aus 20 oder mehr verschiedenen Views (und Controllern) bestehen kann, je nach Eigenschaften des Entities:
    1 Nib mit dem NSTableView und NSArrayController. N Nibs mit "Eingabe-Views", NSObjectController und eigenem Controller als File's Owner.
    Das Problem schildere ich in meinem Mail nochmal genauer.

    Super, das Du mir meine Testanwendung mal anschauen willst - Mail folgt an die web.de-Adresse. Wie gesagt, mit dem Model Key Path "selber", den ich darin eingebaut habe, funktioniert es wie es soll. Nur scheint es mir eine krumme Lösung zu sein, die ggf. zukünftig Probleme macht (?).

    No.