NSToolbarDelegate Ошибка? - PullRequest
       13

NSToolbarDelegate Ошибка?

3 голосов
/ 27 февраля 2012

Я создаю NSWindowController и его окно программно. Поэтому я создаю простой NSToolbar с:

NSToolbar *toolbar = [[NSToolbar alloc] initWithIdentifier:@"PreferencesToolbar"];

[toolbar setDisplayMode:NSToolbarDisplayModeIconAndLabel];
[toolbar setAllowsUserCustomization:NO];
[toolbar setAutosavesConfiguration:NO];

[self.window setToolbar:toolbar];

[toolbar release];

Который все отлично работает, но когда я добавляю [панель инструментов setDelegate: self];

Я получаю следующую ошибку:

ОШИБКА: неверный делегат (не реализует все необходимые методы), и поэтому не может использоваться! (Для отладки добавьте точку останова в NSToolbarError

Согласно NSToolbarDelegate нет обязательных методов, так что здесь не так?

1 Ответ

8 голосов
/ 27 февраля 2012

Чтобы панель инструментов работала с вашим подклассом NSWindowController в качестве его делегата, вы должны объявить его соответствующим протоколу NSToolbarDelegate:

@interface MyController : NSWindowController <NSToolbarDelegate>

Кроме того, из документа , вы должны убедиться, что некоторые реализованы , даже если они являются необязательными, потому что вы создали панель инструментов программно.Это:

-(NSToolbarItem *)toolbar:(NSToolbar *)toolbar
    itemForItemIdentifier:(NSString *)itemIdentifier
willBeInsertedIntoToolbar:(BOOL)flag;

-(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar;

-(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar;

Важно Хотя этот метод помечен как @optional в протоколе NSToolbarDelegate, он должен быть реализован, если соответствующая панель инструментов создается программно.Панели инструментов, созданные в Интерфейсном Разработчике, могут реализовать этот метод для расширения функциональности.

...