Errore NSTOOLBARDELEGATO?
-
13-11-2019 - |
Domanda
IM creando un NSWINDOWCONTROLLER e la sua finestra in modo programmatico.Quindi creo una semplice barra di nstool con:
NSToolbar *toolbar = [[NSToolbar alloc] initWithIdentifier:@"PreferencesToolbar"];
[toolbar setDisplayMode:NSToolbarDisplayModeIconAndLabel];
[toolbar setAllowsUserCustomization:NO];
[toolbar setAutosavesConfiguration:NO];
[self.window setToolbar:toolbar];
[toolbar release];
.
che funziona tutto bene, ma quando aggiungo [barra degli strumenti SetDelegate: Self];
ottengo il seguente errore:
Errore: delegato non valido (non implementa tutti i metodi richiesti), e quindi non può essere utilizzato!(Per eseguire il debug, aggiungere un punto di interruzione a nstoolbarrorrror
Secondo NSTOOLBARDELEGATE non ci sono metodi richiesti, quindi cosa sta andando storto qui?
Soluzione
Per far funzionare la barra degli strumenti con la sottoclasse NSWindowController
come delegato, è necessario dichiararlo per conformarsi al protocollo NSToolbarDelegate
:
@interface MyController : NSWindowController <NSToolbarDelegate>
.
anche, da DOC , deviAssicurarsi che alcuni siano implementati , anche se sono facoltativi, perché hai creato la barra degli strumenti a livello di programmazione.Sono:
.
-(NSToolbarItem *)toolbar:(NSToolbar *)toolbar
itemForItemIdentifier:(NSString *)itemIdentifier
willBeInsertedIntoToolbar:(BOOL)flag;
-(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar;
-(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar;
.Importante Mentre questo metodo è contrassegnato come @optional nel protocollo NSTOOLBARDELEGATE, deve essere implementato se la barra degli strumenti associata viene creata programmaticamente.Le barre degli strumenti create in Interface Builder possono implementare questo metodo per aumentare la funzionalità.