我有一个状态栏项目,可以弹出一个NSMenu菜单,我已经设置了代理并正确连接(-(void)menuNeedsUpdate:(NSMenu *)menu
工作正常)。虽然如此,该方法被设置为在菜单显示之前调用,我需要监听它并触发异步请求,后续在菜单打开时更新菜单,但我不知道应该如何实现。
谢谢 :)
编辑
好的,我现在来到这里:
当您点击菜单项(在状态栏中)时,将调用选择器以运行NSTask。 我使用通知中心来监听任务何时完成,并编写:
[[NSRunLoop currentRunLoop] performSelector:@selector(updateTheMenu:) target:self argument:statusBarMenu order:0 modes:[NSArray arrayWithObject:NSEventTrackingRunLoopMode]];
并且拥有:
- (void)updateTheMenu:(NSMenu*)menu {
NSMenuItem *mitm = [[NSMenuItem alloc] init];
[mitm setEnabled:NO];
[mitm setTitle:@"Bananas"];
[mitm setIndentationLevel:2];
[menu insertItem:mitm atIndex:2];
[mitm release];
}
此方法肯定被调用,因为如果我点击菜单并立即返回它,我会得到一个更新后包含此信息的菜单。问题在于,在菜单打开时它没有更新。
NSRunLoopCommonModes
而不是NSEventTrackingRunLoopMode
,那么它是否能正常工作? - Rob Keniger