Domanda

Devo essere manca qualcosa di semplice, ma non riesco a vederlo. In primo luogo, il programma di installazione:

  • DATreeView, una sottoclasse di NSView
  • DATreeViewController, una sottoclasse di NSViewController
  • MainMenu.xib ha un'istanza di DATreeViewController, che è configurato per caricare una vista da DATreeView.xib
  • MainMenu.xib ha anche un'istanza di DendreaAppDelegate, che ha una presa DATreeViewController (che è collegato fino a esempio di MainMenu.xib DATreeViewController.
  • Do Something!, una voce di menu cablato per inviare un messaggio doSomething: alla First Responder.
  • Non a caso, DATreeViewController ha un'azione chiamato doSomething:.

Quello che voglio è per la voce di menu Do Something! per innescare l'azione doSomething: su DATreeViewController, e facciamo finta che non posso semplicemente impostare direttamente la connessione di destinazione / azione. Mi fermo qui e chiedo, è il mio disegno del tutto sbagliato? È quello che sto cercando di fare stupidi / male / probabile che la vergogna mi negli occhi del mio Dio?

No? Grande. Ora, per la vita di me, non riesco a ottenere la voce di menu di essere attivi. Sto facendo questo su Snow Leopard, se questo fa alcuna differenza.

Al fine di ottenere una buona integrazione tra NSView e NSViewController, ad esempio gestione della catena di risponditore, ho seguito di Matt Gallagher ad esempio , con un cambiamento sostanziale: in nessun punto del processo di caricamento NIB non NSView sembra di ricevere un messaggio setViewController:, così io mando il messaggio me stesso in un messaggio di DATreeViewController loadView. Da quello che posso dire, dopo aver eseguito il seguente codice nel applicationDidFinishLaunching:

NSView *view = self.treeViewController.view;
[self.window.contentView addSubview:view];

la catena risponditore è impostato come previsto, vale a dire:

NSWindow < NSView < DATreeViewController < DATreeView

E 'stata la mia aspettativa che, essendo come DATreeViewController è parte della catena responder, e di essere in quanto risponde alle doSomething:, e di essere in quanto implementa alcuna convalida, tutto quello che ho dovuto fare è usare Interface Builder per cablare il menù Do Something! elemento per il proxy First Responder, con doSomething: come la sua azione, e la voce di menu sarebbe attiva automaticamente.

Che cosa sto facendo di sbagliato? Grazie a tutti per il vostro prezioso aiuto!

È stato utile?

Soluzione

La vostra vista accetta e diventare con successo il primo risponditore?

Altri suggerimenti

È DATreeViewController cablato alla presa viewController del DATreeView in IB?

Hai tracciata attraverso setViewController: e setNextResponder:? Per verificare che nextResponder è stato impostato correttamente

La catena risponditore funziona solo per i messaggi nella superclasse NSResponder quali mouseDown mouseExited ecc ho credo che si possa fare qualcosa di subdolo con l'aggiunta di una categoria per NSResponder a ribollire altri metodi, cercando al nextResponder e l'invio del messaggio su se nextResponder esiste.

Questo sembra essere un esempio di questa tecnica: https: // github.com/MrNoodle/NoodleKit/blob/master/NSResponder-NoodleModalExtensions.m

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top