Cocoa 查找同步扩展的奇怪行为';s工具栏项目菜单
我正在构建一个带有Finder Sync扩展的macOS应用程序,它在Finder中添加了一个工具栏项 我创建了工具栏项菜单,如下所示:Cocoa 查找同步扩展的奇怪行为';s工具栏项目菜单,cocoa,nsmenu,nsmenuitem,appstore-sandbox,findersync,Cocoa,Nsmenu,Nsmenuitem,Appstore Sandbox,Findersync,我正在构建一个带有Finder Sync扩展的macOS应用程序,它在Finder中添加了一个工具栏项 我创建了工具栏项菜单,如下所示: - (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu { NSMenu *menu = [NSMenu new]; NSURL *URL = ...// Create a NSURL dynamically NSMenuItem *item = [NSMenuItem new];
- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu {
NSMenu *menu = [NSMenu new];
NSURL *URL = ...// Create a NSURL dynamically
NSMenuItem *item = [NSMenuItem new];
[item setTitle:@"foo"];
[item setRepresentedObject:URL];
[item setTarget: self];
[item setAction:@selector(itemClicked:)];
[menu addItem:item];
return menu;
}
- (void)itemClicked:(NSMenuItem *)item {
NSLog(@"%@", item.representedObject);
}
该项目确实显示了标题“foo”,但当我点击它时,(null)
已打印出来
我还尝试使用@property(NSURL*)URL
创建NSMenuItem
的子类,并在创建项目时设置URL属性,但单击后URL属性再次变为零
那么这里出了什么问题呢?右键单击Finder时显示的菜单和菜单项是
菜单中提供的菜单项的副本(对于菜单:FIMenuKind)
并非所有菜单项的属性都会在副本中保留下来,从而导致为representedObject
获得的nil
值。NSMenuItem子类也肯定不会被保留
有关Apple的更多信息,请参阅FinderSync标头:
可选公共功能菜单(用于菜单:FIMenuKind)->NSMenu?
使用特定的菜单项属性:标题
,操作
,图像
,和启用
从10.11开始:标记
、状态
和缩进级别
也可以工作,并且允许使用子菜单
使用菜单项的
标题
字符串或标记
来确定所需的URL可能是最好的选择。Thx!最后,我将URL保存为NSUserDefaults中的数组,并将每个项目的标记设置为数组中其URL的索引。