4

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によると、必要なメソッドはありませんが、ここで何が問題になっていますか?

4

1 に答える 1

10

サブクラスをデリゲートとしてツールバーを機能させるには、プロトコル NSWindowControllerに準拠するようにツールバーを宣言する必要があります。NSToolbarDelegate

@interface MyController : NSWindowController <NSToolbarDelegate>

また、ドキュメントから、ツールバーをプログラムで作成したため、オプションであっても、一部実装されていることを確認する必要があります。彼らです :

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

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

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

重要このメソッドはNSToolbarDelegateプロトコルで@optionalとしてマークされていますが、関連するツールバーがプログラムで作成されている場合は実装する必要があります。Interface Builderで作成されたツールバーは、このメソッドを実装して機能を拡張できます。

于 2012-02-27T15:16:06.650 に答える