NSPopUpButtonWillPopUpNotification

  • NSPopUpButtonWillPopUpNotification

    Ich habe folgende einfache Frage (zu der es eine hoffentlich ebenso einfache Antwort gibt :-)):

    Zu meinem Hauptfenster öffnet sich während der Laufzeit (durch Buttonklick) ein Modalsheet. Darin ist ein NSPopUpButton, der mit Informationen aus dem CoreDataBinding versehen wird.
    Nun möchte ich, dass, sobald etwas an der Auswahl geändert wird, eine bestimmte Prozedur abgelaufen wird. Die Prozedur an sich funktioniert auch noch, allerdings nicht bei Änderung des PopUpButtons (sondern über Klick eines normalen Buttons).

    Jetzt hab' ich es mit der NSPopUpButtonWillPopUpNotification probiert, die in meiner AppDelegate.m steht. Das NSPanel (alias Modelsheet s.o.) hat auch den AppDelegate als Delegate eingetragen. Allerdings wird die Prozedur nicht ausgeführt, sobald eine Änderung stattfindet.

    Was mache ich falsch ? Welche Ideen habt ihr ?
  • Golden Delicious schrieb:

    Jetzt hab' ich es mit der NSPopUpButtonWillPopUpNotification probiert, die in meiner AppDelegate.m steht. Das NSPanel (alias Modelsheet s.o.) hat auch den AppDelegate als Delegate eingetragen. Allerdings wird die Prozedur nicht ausgeführt, sobald eine Änderung stattfindet.

    Was mache ich falsch ?

    Du erwartest, dass die Notification an das Delegate Objekt geschickt wird. Delegating und Notifications sind aber zwei verschiedene Konzepte. Um die Notification zu erhalten, musst Du Dich dafür im Notification Center registrieren. Allerdings glaube ich nicht, dass Du die Notification gebrauchen kannst. Die wird nämlich verschickt, bevor das Popup-Menü erscheint, also noch bevor irgendeine Änderung stattgefunden hat.

    Golden Delicious schrieb:

    Welche Ideen habt ihr ?

    Observiere die Auswahl des NSPopUPButtons im Model per Key-Value-Coding.

    Michael
  • scriptedSheep schrieb:

    Delegate des Buttons richtig gesetzt?
    Genau, das hatte ich vergessen, wobei mich das bei meinem Problem (wie Michael schon richtig erkannt hat) noch nicht weiterbringt.

    Michael schrieb:

    Du erwartest, dass die Notification an das Delegate Objekt geschickt wird. Delegating und Notifications sind aber zwei verschiedene Konzepte. Um die Notification zu erhalten, musst Du Dich dafür im Notification Center registrieren. Allerdings glaube ich nicht, dass Du die Notification gebrauchen kannst. Die wird nämlich verschickt, bevor das Popup-Menü erscheint, also noch bevor irgendeine Änderung stattgefunden hat.
    Damit hast du in der Tat Recht, hab' davon schon öfters gehört.

    Michael schrieb:

    Observiere die Auswahl des NSPopUPButtons im Model per Key-Value-Coding.
    Klingt plausibel. Wie gestalte ich dann den Eintrag als Observer ? So hätte ich es mir jetzt spontan überlegt:
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(abzuarbeitendeMethode) name:nil object:[meinPopUpButton selectedItem]];
    Und wenn ja, wo setze ich den Eintrag am besten in meiner AppDelegate.m, windowDidLoad() ?
  • Golden Delicious schrieb:

    Michael schrieb:

    Observiere die Auswahl des NSPopUPButtons im Model per Key-Value-Coding.
    Klingt plausibel. Wie gestalte ich dann den Eintrag als Observer ? So hätte ich es mir jetzt spontan überlegt:
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(abzuarbeitendeMethode) name:nil object:[meinPopUpButton selectedItem]];

    Überlegen ist immer gut. Aber für Key-Value Observing wird das NSNotificationCenter nicht benötigt. Die Methode, mit der Du Dich als Observer anmeldest, sieht ähnlich aus, ist aber diese hier.

    Golden Delicious schrieb:

    Und wenn ja, wo setze ich den Eintrag am besten in meiner AppDelegate.m, windowDidLoad() ?

    Das hängt ein wenig von Deinem Programmaufbau ab. Wenn der Wert im Model und das obervierende Objekt immer existiert, kannst Du dass zum Beispiel gleich beim Programmstart erledigen. Existiert das observierende Objekt nur so lange, wie das Modale Fenster da ist, wären awakeFromNib oder windowDidLoad mögliche Stellen, das zu erledigen.

    Aber lies Dir wirklich mal den von mir verlinkten Key-Value Observing Programming Guide durch. Dann sollte Dir die Wahl, wo Du Dich am Besten als Observer anmeldest, leichter fallen.

    Michael