Finder Sync Extension 工具栏项菜单的奇怪行为
Weird behavior of Finder Sync Extension's tool bar item menu
我正在使用 Finder Sync Extension 构建一个 macOS 应用程序,它将工具栏项目添加到 Finder。
我创建了这样的工具栏项目菜单:
- (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 属性又变成nil了
那么这里出了什么问题?
在 Finder 中右键单击时显示的菜单和菜单项是您在 menu(for menu: FIMenuKind)
中提供的菜单项的副本。
并非所有菜单项的属性都能在副本中保留下来,从而导致您为 representedObject
获得的 nil
值。一个 NSMenuItem 子类也肯定不会被保留。
有关 Apple 的更多信息,请参阅 FinderSync header:
optional public func menu(for menu: FIMenuKind) -> NSMenu?
Specific menu item properties are used: title
, action
, image
, and enabled
.
Starting in 10.11: tag
, state
, and indentationLevel
also work, and submenus are allowed.
使用菜单项的 title
字符串或 tag
来确定所需的 URL 可能是最好的选择。
我正在使用 Finder Sync Extension 构建一个 macOS 应用程序,它将工具栏项目添加到 Finder。
我创建了这样的工具栏项目菜单:
- (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 属性又变成nil了
那么这里出了什么问题?
在 Finder 中右键单击时显示的菜单和菜单项是您在 menu(for menu: FIMenuKind)
中提供的菜单项的副本。
并非所有菜单项的属性都能在副本中保留下来,从而导致您为 representedObject
获得的 nil
值。一个 NSMenuItem 子类也肯定不会被保留。
有关 Apple 的更多信息,请参阅 FinderSync header:
optional public func menu(for menu: FIMenuKind) -> NSMenu?
Specific menu item properties are used:
title
,action
,image
, andenabled
.Starting in 10.11:
tag
,state
, andindentationLevel
also work, and submenus are allowed.
使用菜单项的 title
字符串或 tag
来确定所需的 URL 可能是最好的选择。