2013-11-24 10 views
6

Ich habe ein Controller-Objekt, das ein NSMenu besitzt und ist der Delegat dieses Menüs, im Interesse der faulen Bevölkerung.NSMenu Delegat nicht aufgerufen, um es zu bevölkern

Allerdings wird weder numberOfItemsInMenu: noch menuNeedsUpdate: jemals aufgerufen, und so bleibt das Menü leer.

Ich habe bestätigt, dass:

  • Das Controller-Objekt freigegeben worden ist. (Der Controller besitzt wiederum das Menü.)
  • Es hat ein Menü.
  • Das Menü hat einen Delegaten, und das ist der Controller.

Wenn ich implementieren menuWillOpen:, dass genannt wird, aber you're not supposed to populate the menu there.

Ich habe versucht, das Menü eine update Nachricht zu senden, und das hatte keine Wirkung. Der Delegierte blieb nicht angerufen, und die Speisekarte blieb leer.

Falls relevant: Dieses Menü befindet sich nicht im Hauptmenü; es wird an anderer Stelle verwendet.

Warum fragt das Menü nicht nach dem Delegaten, um es zu füllen? Gibt es etwas, das ich vermisst habe, oder ist es einfach kaputt?

+0

Können Sie Ihren Code hier einfügen. Damit wir es auch ausprobieren? –

+0

@ HussainShabbir: Nein. Der Code gehört nicht mir; Ich arbeitete an einem Auftragsjob. (Abgesehen davon, ich habe es bereits geändert, um nicht auf die Methoden angewiesen zu sein, die vom System aufgerufen werden.) –

+0

Ich habe jetzt genau dasselbe Problem, und Ihre Erwähnung über 'menuWillOpen:' hat mir viel Zeit gespart. Für den Datensatz macht 'menuDidClose:' auch dasselbe Problem, selbst wenn die Eigenschaft 'enabled' eines Menüelements gesetzt ist. Das einzige, was funktioniert, ist 'menuNeedsUpdate:'. – Eonil

Antwort

0

Vielleicht brauchen Sie eine starke Referenz auf den Delegaten. Versuchen Sie, die Variablendeklaration aus Ihrer Methode zu entfernen und eine Membervariable auf Klassenebene zu erstellen. betrachten Sie diese Antwort: https://stackoverflow.com/a/21816149/1664943

+0

Sie haben diesen Teil der Frage verfehlt: "Ich habe Folgendes bestätigt: • Das Controller-Objekt wurde nicht freigegeben." –

+0

Hatten Sie an einem Punkt ein View setMenu: ..? Wenn ja - wo haben Sie die Menüvariable abgebremst? In meinem Fall wurde der Controller ebenfalls NICHT freigegeben, aber ARC hat den Verweis auf meinen Stellvertreter ungültig gemacht. – ThorstenC

+0

Das Controller-Objekt, auf das ich mich bezog, ist der Delegat des Menüs und sein Besitzer. –

Verwandte Themen