Bindings

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

  • Die Bindings richtig zu setzen treibt mich mal wieder an den Rande des Irrsinns.
    Folgendes Problem :
    Ich lese eine plist Datei ein, die Voreinstellungen enthält :

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    3. <plist version="1.0">
    4. <array>
    5. <dict>
    6. <key>bezeichner</key>
    7. <string>Gewebe</string>
    8. <key>wert</key>
    9. <integer>0</integer>
    10. </dict>
    11. ...
    Alles anzeigen

    Nach dem Einlesen weise ich dieses einem MutableArray zu :

    Quellcode

    1. self.commonSettings = [NSMutableArray arrayWithContentsOfFile:
    2. [[NSBundle mainBundle] pathForResource:@"common-settings" ofType:@"plist"]];
    Jetzt möchte ich die Bindings setzen, um diese Infos mit einem NSPopupButton zu verbinden, der den gewählten Gewebetyp anzeigt (3 Möglichkeiten sind hinterlegt)
    Ich füge also einen NSArrayController hinzu, setze unter "Availability - Controller Content - Content Array" ein "Bind To: Main Controller" (dort wird commonSettings erzeugt).
    Bei "Model Key Path" trage ich "commonSettings" ein.

    Angenommen, die Vorgehensweise stimmt bis anhin (wenn nicht, ist der folgende Teil natürlich hinfällig):
    Wie muss ich den PopupButton jetzt verbinden? Ich möchte gerne, dass wenn - wie im Beispiel - der Wert = 0 ist, auch automatisch der erste Eintrag des Popupmenus angezeigt wird?

    Ich hab jetzt so viel probiert, dass ich schon unsicher bin, hier völlig auf dem Holzweg zu sein, daher dachte ich, ich frage lieber, bevor ich weiterhin im Dunklen stochere. :S

    Danke im Voraus für jeden Tipp.
    Hans
  • Du musst den content des popbuttons an arrangedObjects des AC, title an arrangedObjects.bezeichner (btw. es empfiehlt sich, englische Namen zu verwenden) und das value-Binding an arrangedObjects.wert. Dann noch das selectedValue an Dein Modell.

    Bin gerade unterwegs am Handy und schreibe das nur aus dem Hut aus, wenn Du ein Beispielprojekt hochlädst, schaue ich es mir an.

    Beste Grüße, Markus
  • @Markus : haut irgendwie nicht hin. Aber durch Zufall bin ich dennoch einen Schritt weitergekommen.

    Beim PopupButton setze ich das Binding bei "Selected Index", bind to : "Array Controller", Model Key Path : "wert".
    Das funktioniert, zumindest für diesen einen PopupButton.

    Allerdings enthält die plist Datei mehrere solcher Einträge, die dann verschiedenen PopupButtons zugewiesen werden sollten.

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    3. <plist version="1.0">
    4. <array>
    5. <dict>
    6. <key>bezeichner</key>
    7. <string>Gewebe</string>
    8. <key>wert</key>
    9. <integer>0</integer>
    10. </dict>
    11. <dict>
    12. <key>bezeichner</key>
    13. <string>Alkalisystem</string>
    14. <key>wert</key>
    15. <integer>1</integer>
    16. </dict>
    17. ...
    Alles anzeigen
    Verfahre ich mit dem zweiten PopupButton auf dieselbe Weise, der die Auswahl von "Alkalisystem" anzeigen soll, klappt es nicht, hierfür fehlt wohl noch die Zuordnung, dass nun der zweite Eintrag der plist genommen werden muss. (bei beiden wäre Index 0 ausgewählt).
    Aber welches Binding muss ich hierfür setzen, damit das klappt?

    Hans
  • Vielen Dank Markus, das ist aber leider nicht genau das Problem, das ich habe. Wahrscheinlich habe ich mich auch bei der Fragestellung nicht klar ausgedrückt.
    Ich ändere dein Projekt mal dergestalt ab, dass es genau das wiedergibt, was ich gerne hätte und lade es dann hoch (ohne die notwendigen Bindings eben).

    Aber nochmals vielen Dank, dass Du Dir die Zeit genommen hast!
    Hans
  • Also, das Format deiner Voreinstellungen ist für deine Wunsch-GUI ungeeignet. Dafür würde ein schlichtes Dictionary ausreichen:

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    3. <plist version="1.0">
    4. <dict>
    5. <key>Gewebe</key>
    6. <integer>1</integer>
    7. <key>Alkalisystem</key>
    8. <integer>2</integer>
    9. </dict>
    10. </plist>
    Wenn das Format allerdings so vorgegeben ist, dann musst du es halt beim Lesen so umwandeln, dass du es für Bindings benutzen kannst und dann beim Speichern halt wieder zurück wandeln. Anbei das Beispielsprojekt, wie man es machen könnte.
    Dateien
    • PopUpBindings.zip

      (22,09 kB, 326 mal heruntergeladen, zuletzt: )
  • Vielen Dank, das ist jetzt aber ohne Bindings gemacht (delegates). Ich wollte das schon gerne über Bindings realisieren und wenn es nur darum geht, das Prinzip zu verstehen.

    Ich schau mir aber mal die veränderte Datenstruktur im plist an. Vielleicht war das der Knackpunkt.

    Nochmals Danke!
    Hans

    Edit : FUNKTIONIERT!!! selected index binden und Zuweisung des Wertes mit geänderter Datenstruktur und es läuft.
    Vielen Dank!!!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von HansGerber ()