我有一个基于NSDocument的应用程序(NSPersistentDocument),在应用程序中我可以(像往常一样)创建多个文档。
主文档窗口(基于NSPersistentDocument)具有、添加了IB、工具栏。在代码中,我使用方法insertItemWithItemIdentifier
和- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
添加到工具栏项(NSToolbarItems)。
代码示例:
[_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
被调用两次
这对我来说很奇怪,因为每个文档都有自己的工具栏,并且只为该文档设置了委托。
我不知道自己做错了什么。也许有人会指出我犯了什么错误。
您通常不会自己插入工具栏项;实现委托方法CCD_ 5和CCD_。
我找到了解决方案:我不能使用从nib创建的tooolbar,因为每个创建的这个方法工具栏都有相同的标识符。当我使用不同的标识符在代码中创建工具栏时,问题已经解决了。