Cocoa Bindings Problem

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

  • Cocoa Bindings Problem

    Guten Tag zusammen!

    Ich habe ein Problem mit Cocoa-Bindings . Das "Cocoa Bindings Programming Topics" habe ich auch schon befragt
    - offenbar habe ich prinzipiell etwas nicht verstanden, vielleicht kann mir hier jemand helfen:

    Es geht um die Verbindung einer Subclass von NSObjectController, einem Model, und einem View.
    Alle drei Objekte werden zur Laufzeit erzeugt und verbunden, nicht in InterfaceBuilder.
    Zunächst wird das Model erzeugt, dann wird der Controller initialisiert, mit dem Model als Content (initWithContent: ),
    danach wird ein View erzeugt, der das Model repräsentieren soll. Nach der Initialisierung des Views
    binde ich ihn mit den für ihn wichtigen Keys an den Controller.

    zB. [self bind:@"start" toObject:controller withKeyPath:@"selection.start", options:nil];

    Meine Testsuite bestätigt mir, dass eine Änderung des entsprechenden Wertes des Models sich im View niederschlägt.

    Allerdings auch nur, wenn ich "um die Änderung (mit setValue:forKey: ) herum" willChangeValueForKey: und didChangeValueForKey:
    auf dem Model aufrufe. (Das passiert in der setValue:forKey: Methode des Models.)

    Leider funktioniert es andersherum nicht: Wenn ich den Wert im View ändere reagiert das Model nicht.
    Ich habe auch schon versucht, zusätzlich [controller selection] mit dem Key @"start" an das Model zu binden.
    Ohne Erfolg.

    Es gibt noch weitere Views, die die Werte desselben Models repräsentieren und dann auch ändern sollen.
    Ich dachte ein Binding funktioniert immer in beide Richtungen?
    Was habe ich übersehen?

    Vielen Dank

    Max
  • Das gebundene Objekt heißt gebundenes Objekt, weil die gebundene Eigenschaft nicht mehr selbständig ist, sondern an die andere gebunden. Sie existiert also gewissermaßen nicht mehr. (Die tatsächlichen Auswirkungen sind schlimmer.)

    Du darfst immer nur das obsevierte Objekt ändern. Du kommst mit -infoForBinding: dran.

    Quellcode

    1. [[[self infoForBinding:@"binding"] observedObjectKey] setValue:… forKey:[[self infoForBinding:@"binding"] observedKeyPathKey]


    Types in Safari …
    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"?