Menüitemsteuerung aus verschiedenen Klassen/Fenstern heraus

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

  • Menüitemsteuerung aus verschiedenen Klassen/Fenstern heraus

    Hallo zusammen,

    ich bin neu hier und hoffe mit meiner Frage im richtigen Bereich gelandet zu sein.

    Ich habe gerade einige Beispiele in Xcode mit Cocoa durchgearbeitet und bin nun richtig begeistert.

    In meinem ersten eigenen Projekt möchte ich einen Vokabeltrainer erstellen. Das Design und die Menüleiste inkl. dem Aufruf der verschiedenen Fenster funktioniert einwandfrei auch die MySQL-Anbindung inkl. des Datenaustausches funktionieren bereits wie geplant.

    Nun bin ich jedoch auf ein Problem gestossen und benötige ein wenig Hilfe. Ich möchte nachdem erfolgreichem Login in der Menüleiste das Item (Kategorie/Verwalten) via menuKategorieVerwalten setEnabled:TRUE dem Anwender verfügbar/anwählbar machen.

    Von der dazugehörigen Klasse also im Fenster Verwalten funktioniert der obige Befehl einwandfrei. Wenn ich diesen in eine Methode "enableMenuKategorieVerwalten" unterbringen funktioniert dies ebenfalls mit dem Aufruf [self enableMenuKategorieVerwalten]; einwandfrei.
    Wenn die Methode aus einer anderen Klasse aufgerufen wird, geschieht nichts! Keine Fehlermeldung, keine Rückmeldung, rein gar nichts.

    In der aufrufenden Klasse binde ich die Klasse Kategorie in mit dem Befehl #import "Kategorie.h" in der *.m Datei ein. Anschließend initialisiere ich diese mit "Kategorie *newKategorie = [[Kategorie alloc] init];" und rufe diese wie folgt auf: "[newKategorie.self enableMenuKategorieVerwalten];"

    Ohne Rückmeldung/Anhaltspunkte fällt es mir sehr schwer die Fehlerquelle einzugrenzen.

    Ich hoffe Ihr könnt mir helfen. Ist bestimmt nur eine Kleinigkeit. Vielleicht übersehe ich auch nur etwas.

    Vielen Dank.
  • OSXDev schrieb:

    Ist bestimmt nur eine Kleinigkeit. Vielleicht übersehe ich auch nur etwas.
    Nun ja, die Kleinigkeit ist, dass dir der Unterschied zwischen Klasse und Instanz einer Klasse nicht klar ist.

    OSXDev schrieb:

    Anschließend initialisiere ich diese mit "Kategorie *newKategorie = [[Kategorie alloc] init];"
    Damit initialisierst du keine Klasse, sondern du erzeugst eine neue Instanz der Klasse. Diese neue Instanz hat daher auch nicht die Verknüpfungen so gesetzt, wie die bereits vorhandene Instanz. Du musst die Nachricht enableMenuKategorieVerwalten an die bereits vorhandene Instanz schicken.
  • Hallo,

    vielen Dank für Eure Hinweise.

    Ich habe die genannten Anregungen nachgelesen. Mir ist der Unterschied nun klar geworden. Beispiele habe ich jedoch nur in Bezug auf Instanzvariablen (retain,copy) nicht auf Methoden gefunden. Vielleicht war der Artikel auch nicht vollständig.

    @Michael: Kannst Du mir ein Beispiel oder Quellen posten?

    Noch ein Lob an dieses Forum und seine Mitglieder: Ich war bisher nicht wirklich angetan von dieser Art des Wissensaustausch den bei meiner Suche im Web habe ich viel unqualifizierte Beiträge gelesen. Deshalb nochmals vielen Dank.
  • Hallo zusammen,

    die Herausforderung wurde bewältigt. Eigentlich ganz simple, wenn man weiß an welcher Schraube man drehen muss.

    hier mein Lösungsweg:
    - alle Methoden für die Menüsteuerung in Appdelegate unterbringen
    - gilt auch für die benötigten Instanzvariablen
    - die entsprechenden Referencing Outlets mit den Menuitems (die angepasst werden sollen) verknüpfen
    - nicht vergessen, innerhalb der Methoden das jeweilig zugehörige Fenster initialisieren (s. Hinweis von MCDan und Michael)

    und schon können die Menuitems aus jedem Programmbereich bzw. aus jeder Klasse heraus ein-, ausgeschaltet bzw. umbenannt oder erweitert werden.

    Danke nochmals an MCDan und Michael.
  • Fazit hinsichtlich der Vorgehensweise bei "Automatic Menu Enabling".

    Positiv:
    - System stellt sämtliche Eigenschaften für das Handling bereit
    - einfache Handhabung
    - auf Seiteneffekte wird man frühzeitig hingewiesen

    Neutral:
    - Implementierungsaufwand (setzt genaue Kenntnisse der "Antwort-bzw. Abarbeitungskette" voraus)

    Negativ:
    - für Anfänger schwierig umzusetzen, da genauere Kenntnisse der Abläufe zwingend nachgelesen und evtl. In Teilschritte untergliedert durchgearbeitet werden müssen.

    Eigentlich ist dieser Aspekt nicht unbedingt als negativ zu werten, denn aus eigener Erfahrung kann ich nur jedem raten viel zu lesen und zu probieren. Ohne Fleiß kein Preis. Wer nicht die Zeit hat, dem lege ich meinen Lösungsweg nahe.

    Für mich selbst, bleibt es bei diesem Projekt bei dem von mir beschriebenen Lösungsweg. Alles andere wäre einfach nicht effizient. Bei nachfolgenden Projekten setze ich jedoch lieber auf dokumentierte Vorgehensweisen. Erspart mir die Zeit meine Abläufe zu dokumentieren. ;)