2

我有基于 NSDocument (NSPersistentDocument) 的应用程序,在应用程序中我可以(通常)创建多个文档。

主文档窗口(基于 NSPersistentDocument)已添加 IB、工具栏。在代码中,我使用方法insertItemWithItemIdentifier- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag.

代码示例:

[_toolbar insertItemWithItemIdentifier:@"addTape" atIndex:2];

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
    NSToolbarItem *item =nil;

    if ([itemIdentifier isEqual:@"addTape"]) {
        item = [[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier];
        item.label = NSLocalizedString(@"Add Tape",@"Add Tape");
        item.paletteLabel = NSLocalizedString(@"Add Tape",@"Add Tape");
        item.toolTip = NSLocalizedString(@"Adds new tape",@"Adds new tape");
        item.image = [NSImage imageNamed:@"NSAddTemplate"];
        item.target = self;
        item.action = @selector(addTape:);
        item.tag = 101;         
    }
}

在我只打开一个文档之前,一切都是正确的。当我在第一个文档窗口工具栏上打开第二个文档(或创建新文档)时,工具栏项目加倍(打开第三个文档后,第一个窗口上的项目增加三倍,第二个窗口增加一倍,依此类推)。

编辑:我注意到,itemForItemIdentifier每次我尝试添加工具栏项时,都会在每个窗口上调用它。例如:如果我有两个窗口(两个打开的文档),并且在一个窗口上我尝试添加一个按钮itemForItemIdentifier被调用两次。
这对我来说很奇怪,因为每个文档都有自己的工具栏,其中委托仅设置为此文档。

我不知道我做错了什么。也许有人会指出我犯错的地方。

4

2 回答 2

1

您通常不会自己插入工具栏项;实现委托方法toolbarAllowedItemIdentifiers:toolbarDefaultItemIdentifiers:并且工具栏将根据这些列表进行初始化。

于 2012-07-23T00:00:18.920 回答
1

我找到了解决方案:我不能使用从 nib 创建的工具栏,因为每个创建的这个方法工具栏都有相同的标识符。当我在代码中使用不同的标识符创建工具栏时,问题就消失了。

于 2012-07-23T08:32:41.080 回答