I implemented the Finder Sync extension according to the provided sample provided by Apple.
After clicking on the newly created context menu item, the corresponding sampleAction action is sampleAction . Unfortunately, the sender passed to the method does not match the instance created in menuForMenuKind .
The code
- (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); } }
displays the following result after I clicked on an item in the context menu
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: ''
.
Is it possible to associate the sender with the menu item that was clicked?
finder macos nsmenuitem findersync
Joe inner
source share