首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FinderSync上下文菜单调用错误类中的操作

FinderSync上下文菜单调用错误类中的操作
EN

Stack Overflow用户
提问于 2015-06-24 10:09:28
回答 1查看 180关注 0票数 3

这里有一个非常奇怪的问题:我正在编写一个FinderSync扩展,更具体地说,我正在向上下文菜单中添加元素。如果我把所有的东西都打包成一个类,它就运行得很好:

1)我有一个名为FinderSync的主扩展类

2)在这个类中,我实现了

代码语言:javascript
复制
- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu

3)在这种方法中,我正在写作(除其他外):

代码语言:javascript
复制
NSMenuItem *myItem = [[NSMenuItem alloc]
            initWithTitle:@"myTitle" 
            action:@selector(myAction:)
            keyEquivalent:@""];

4)在FinderSync类中,存在一个方法

代码语言:javascript
复制
- (IBAction)myAction:(id)sender;

5)当用户单击菜单项时,将按预期调用此方法。

Now:,我试图将上下文菜单功能外包给另一个类,称为ContextMenuHandler。现在的情况:

1)我得到了主扩展类FinderSync和另一个名为ContextMenuHandler的类。FinderSync创建一个ContextMenuHandler实例,并保留对它的引用(_contextMenuHandler)。

2)这两个类都实现了

代码语言:javascript
复制
- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu

3) FinderSync实现menuForMenuKind除了调用什么都不做。

代码语言:javascript
复制
return [_contextMenuHandler menuForMenuKind:whichMenu];

4) ContextMenuHandler创建NSMenuItem。(完全相同的代码)。我甚至试图补充:

代码语言:javascript
复制
[myItem setTarget:self];
[myItem setAction:@selector(myAction:)];

两个类都实现了myAction。

5) Expected: myAction of ContextMenuHandler在单击菜单项后将被调用: myAction of FinderSync称为.

我还会在更新后重新启动查找器,ContextMenuHandler中的断点被正确击中,因此它似乎不是“运行旧FinderSync版本”的问题。

有谁能解释(或纠正)这种奇怪的行为吗?

EN

回答 1

Stack Overflow用户

发布于 2016-10-25 09:41:45

FIFinderSyncProtocol文档包括一些有用的上下文:

menu(for menu: FIMenuKind) 扩展的主体对象为每个菜单项分配的操作提供了一个方法。

它指出“扩展的主体对象”提供了操作方法,正如您所观察到的。

使用特定的菜单项属性:标题、操作、图像和启用。 从10.11开始:标记、状态和indentationLevel也可以工作,并且允许子菜单。

值得注意的是,支持的NSMenuItem属性列表中没有target。无法为该操作设置指定的目标,因此苹果只需在FinderSync子类上调用该操作。

我刚刚在property representedObject上遇到了一个类似的问题。当我们以sender的形式获得菜单项时,没有持久化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31023752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档