Joe*_*ner 7 macos finder nsmenuitem findersync
我根据Apple提供的示例实现了Finder Sync扩展.
单击新创建的上下文菜单项后,将sampleAction执行相应的操作.不幸的是,传递给方法的发送方与创建的实例不匹配menuForMenuKind.
代码
- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu
{
NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:@"testTitle" action:@selector(sampleAction:) keyEquivalent:@""];
menuItem.tag = 1;
// print menu attributes
NSLog(@"------------------original menu-----------------");
NSLog(@"menu address: %p", menuItem);
NSLog(@"menu tag: %ld", menuItem.tag);
NSLog(@"menu title: '%@'", menuItem.title);
NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
[menu addItem:menuItem];
return menu;
}
- (IBAction)sampleAction:(id)sender
{
if( [sender isKindOfClass:[NSMenuItem class]])
{
NSMenuItem* menuItem = sender;
NSLog(@"------------------menu passed to action-----------------");
NSLog(@"menu address: %p", menuItem);
NSLog(@"menu tag: %ld", menuItem.tag);
NSLog(@"menu title: '%@'", menuItem.title);
}
}
Run Code Online (Sandbox Code Playgroud)
单击上下文菜单中的元素后,得到以下输出
2014-12-07 19:55:36.923 FinderSync Extension[1265:62630] ------------------original menu----------------
2014-12-07 19:55:36.923 FinderSync Extension[1265:62630] menu address: 0x6080000abbe0
2014-12-07 19:55:36.924 FinderSync Extension[1265:62630] menu tag: 1
2014-12-07 19:55:36.924 FinderSync Extension[1265:62630] menu title: 'testTitle'
2014-12-07 19:55:40.328 FinderSync Extension[1265:62630] ------------------menu passed to action----------------
2014-12-07 19:55:40.328 FinderSync Extension[1265:62630] menu address: 0x6080000aba00
2014-12-07 19:55:40.328 FinderSync Extension[1265:62630] menu tag: 0
2014-12-07 19:55:40.328 FinderSync Extension[1265:62630] menu title: ''
Run Code Online (Sandbox Code Playgroud)
.
是否有机会将发件人链接到菜单项,该菜单项被点击了?
作为参考,这显然是预期的行为.我向Apple提交了一份错误报告,这是他们的答复:
此问题的行为基于以下内容:
Finder Sync不会保留特定的NSMenuItem*实例,并且只会考虑很少的属性(仅标题,操作,图像和启用).在将来的版本中,可能支持-tag属性,但不支持-representedObject. - 如果需要动态操作集,则应该可以使用sel_registerName和method_setImplementation(in)等函数在运行时创建方法.
| 归档时间: |
|
| 查看次数: |
361 次 |
| 最近记录: |