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?

È stato utile?

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à.

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