我在这里遇到了一个非常奇怪的问题:我正在编写一个 FinderSync 扩展,更具体地说,我正在向上下文菜单添加元素。现在,如果我将所有内容打包到一个类中,它运行良好:
1)我有一个主要的扩展类,叫做 FinderSync
2)在这个类中,我实现
- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu
3)在这种方法中,我正在写(除其他外):
NSMenuItem *myItem = [[NSMenuItem alloc]
initWithTitle:@"myTitle"
action:@selector(myAction:)
keyEquivalent:@""];
4)在FinderSync类中,存在方法
- (IBAction)myAction:(id)sender;
5) 当用户点击菜单项时,该方法按预期调用。
现在:我正在尝试将上下文菜单功能外包给另一个名为 ContextMenuHandler 的类。现在的情况:
1) 我有一个名为 FinderSync 的主扩展类和另一个名为 ContextMenuHandler 的类。FinderSync 创建一个 ContextMenuHandler 实例并保留对它的引用 (_contextMenuHandler)。
2)两个类都实现
- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu
3) menuForMenuKind 的 FinderSync 实现只调用
return [_contextMenuHandler menuForMenuKind:whichMenu];
4) ContextMenuHandler 创建 NSMenuItem。(完全相同的代码)。我什至尝试添加:
[myItem setTarget:self];
[myItem setAction:@selector(myAction:)];
这两个类都实现了 myAction。
5)预期:点击菜单项后会调用 ContextMenuHandler 的 myAction观察到:调用 FinderSync 的 myAction...
我也在更新后重新启动 finder,并且 ContextMenuHandler 中的断点被正确命中,所以它似乎不是“运行旧 FinderSync 版本”的问题。
有人对这种奇怪的行为有解释(或修复)吗?