[FIXED] Binding nur in eine Richtung

  • [FIXED] Binding nur in eine Richtung

    Wieder mal ich ;)

    Ich möchte eine Checkbox (NSButton) via binding dann aktivieren, wenn ein gewisser Wert (vom type Date) in einer Entity nil oder nicht nil ist (siehe Datei-Anhang).

    "Eigentlich nicht so schwer". Darüber hinaus möchte ich den Button aber auch via User-Interaction steuern können.

    Der Button zeigt grundsätzlich entweder checked oder nicht checked richtig an, je nach ausgewähltem entity-objekt. Wenn ich jetzt den Button aber klicke, bekomme ich einen Error:

    Quellcode

    1. 2010-02-06 23:16:06.674 Tasco[14095:a0f] Transformer does not support reverse transformations


    Ich habe einen eigenen ValueTransformer geschrieben, der mir YES oder NO abhängig davon, ob value==nil ist oder nicht liefert (im Grunde genauso wie NSIsNil), der jedoch nur in eine Richtung funktioniert.

    Dadurch, dass ich diese Error-Meldung bekomme, wird aber meine IBAction, die ich mit dem NSButton verbunden habe nicht angesprochen -> Die User-Interaction funktioniert nicht mehr.

    Im Grunde Will ich also, dass der NSButton wenn er geklickt wird, seinem Binding-Partner nichts mitteilt


    Sry, für meine umständliche Formulierung... Legastheniker und dazu noch müde ;)

    lg.
  • Ohne dein Problem genau verstanden zu haben: Könntest du nicht support für reverse transformation in deinen Value Transformer einbauen, der aber den Wert nicht ändert? (Sollte bei einem Bool-Wert ja nicht all zu umständlich sein...)
    Windows, nein danke...
  • RE: Binding nur in eine Richtung

    Du willst also ne Heirat, aber nicht gebunden sein? Da verhält sich Cocoa wie $StandardmodellDerFrau: Sie zickt.

    Das wahre Problem ist aber dein Value-Transformer. Hast du mal daran gedacht, eine abgeleitete Eigenschaft im Model unterzubringen?
    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"?
  • Original von Clemens
    Ohne dein Problem genau verstanden zu haben: Könntest du nicht support für reverse transformation in deinen Value Transformer einbauen, der aber den Wert nicht ändert? (Sollte bei einem Bool-Wert ja nicht all zu umständlich sein...)

    Wenn der Wert nicht verändert wird, zeigt die Checkbox was demnächst an? Tricksereien funktionieren nicht.

    Mir scheint aber überhaupt dieses UI irgendwie schräg zu sein. Welche Information genau zeigt die Checkbox an?
    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"?
  • Original von Amin Negm-Awad
    Mir scheint aber überhaupt dieses UI irgendwie schräg zu sein. Welche Information genau zeigt die Checkbox an?

    Ich habe sowas mal in einer Windows-Anwendung gesehen.

    Es konnten Detailinformationen hinterlegt werden, die allerdings kein Muss waren.
    War kein Häkchen gesetzt und man hat eins gemacht, dann ging ein Fensterchen auf, in dem man die Detailinformationen eintippseln konnte. Das Häkchen ließ sich dann aber nicht mehr wegnehmen.
    (konkret wurde das Häkchen gesetzt, sofern ein Kunde einen Kostenvoranschlag angenommen hat. In dem Fenster wurden Annahmedatum und der Name des Bestellers hinterlegt. Den Haken wieder entfernen zu können hat dann einfach keinen Sinn.)

    Wofür man das auf dem Mac braucht weiß ich aber nicht.
    Das Binding ist immer bidirektional. Ich hatte so etwas auch schon mal probiert.
    Auch mit einem Bindung an eine Methode in deinem MO, welches einfach nur YES oder NO je nach Existenz der Daten zurückliefert, wird da rumspinnen.
    Das Ganze wird als Binding nix werden. Häng dich lieber beim Aktualisieren der Daten ein und setz den Checked-Status manuell in Abhängigkeit der hinterlegten Daten.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Original von Amin Negm-Awad
    Original von Clemens
    Ohne dein Problem genau verstanden zu haben: Könntest du nicht support für reverse transformation in deinen Value Transformer einbauen, der aber den Wert nicht ändert? (Sollte bei einem Bool-Wert ja nicht all zu umständlich sein...)

    Wenn der Wert nicht verändert wird, zeigt die Checkbox was demnächst an?

    Den Inhalt des Transformers. Da der ja eh dynamisch auswertet, ob jetzt Daten vorhanden sind oder nicht, also keinen definitiven Eingriff ins Modell vornimmt, könnte das auch gehen.
    Oder gleich das MO subclassen und an die Methode '-hasData' binden, welches die Umwandlung durchführt. Spart den Transformer. Was die Methode '-setHasData:' tut wäre dann ja egal, da '-hasData' ja nur auswertet, ob 'data==nil' oder nicht.

    Was übersehe ich bei der Theorie?
    (Nein, ich habe noch keine Bindings an eigene Methoden gemacht, weiß also nicht, wie die Methoden jetzt tatsächlich heißen müssen.)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Die checkbox ist schon an die Eigenschaft gebunden. Ich will damit eine Datumseingabe aktivieren bzw. deaktivieren, die Idee dahinter ist, dass ich als Datum auch "nil" haben kann, wenn kein Datum angegeben wurde. Wenn der User jetzt aber sich später denkt, er will kein Datum in dieser Zeile haben, kann er mit dem Häkchen das Datum wieder auf nil setzten, und ausblenden.

    Ich könnte natürlich auch einen Button für diese Zurücksetz-Funktion verwenden, ich will aber nicht den Standardwert im DatePicker stehen haben, wenn ich in wirklichkeit KEIN Datum haben will.

    Werde es jetzt wohl mit controllern lösen.

    lg.
  • bzw. habe ich das jetzt so gelöst, dass ich meiner NSManagedObject-Subclass einen BOOL Attribut gegeben habe, wleches mir YES oder NO zurückliefert, je nach meinem "date"-Wert. Ich habe auch den setter überschrieben, dass er einfach nichts macht.

    So brauche ich keinen Controller, und ich finde das eigentlich eine nette lösung.

    Danke für eure Hilfe!

    lg.
  • Original von SquirrelFrank
    So brauche ich keinen Controller, und ich finde das eigentlich eine nette lösung.

    Das meinte ich. :)
    Wie heißt denn der Setter für das Binding? Oder macht die gebundene Methode quasi beides?
    Ich würd mich über nen Codeschnippsel bezüglich deiner Lösung freuen. :)
    (Ob es der 'richtige' Weg ist weiß ich auch nicht. Hauptsache läuft. ^^)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P