NSToolbarDelegate错误?

Eri*_*rik 3 macos cocoa objective-c nstoolbar

我以编程方式创建NSWindowController及其窗口.所以我创建了一个简单的NSToolbar:

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

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

[self.window setToolbar:toolbar];

[toolbar release];
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但当我添加[toolbar setDelegate:self];

我收到以下错误:

错误:无效的委托(未实现所有必需的方法),因此无法使用!(要调试,请向NSToolbarError添加断点

根据NSToolbarDelegate,没有必要的方法,所以这里出了什么问题?

小智 8

为了使工具栏与您的NSWindowController子类一起作为其委托,您必须声明它符合NSToolbarDelegate协议:

@interface MyController : NSWindowController <NSToolbarDelegate>
Run Code Online (Sandbox Code Playgroud)

此外,从文档,你必须确保一些正在实施的,即使它们是可选的,因为您创建的工具栏程序.他们是 :

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

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

-(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar;
Run Code Online (Sandbox Code Playgroud)

重要说明虽然此方法在NSToolbarDelegate协议中标记为@optional,但如果以编程方式创建关联的工具栏,则必须实现此方法.在Interface Builder中创建的工具栏可以实现此方法以增强功能.