gpt4 book ai didi

cocoa - Finder Sync Extension 工具栏项目菜单的奇怪行为

转载 作者:行者123 更新时间:2023-12-03 16:19:15 24 4
gpt4 key购买 nike

我正在使用 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 中右键单击时显示的菜单和菜单项是您在菜单(对于菜单: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 可能是最佳可用选项。

关于cocoa - Finder Sync Extension 工具栏项目菜单的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43501281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com