У меня действительно странная проблема: я пишу расширение 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) Ожидается: myAction ContextMenuHandler будет вызываться после нажатия на пункт меню Observed: myAction FinderSync вызывается...
Я также перезапускаю Finder после обновлений, и точка останова в ContextMenuHandler срабатывает правильно, поэтому это не похоже на проблему «старой версии FinderSync».
Кто-нибудь может объяснить (или исправить) это странное поведение?