Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 显示主机菜单时更新NSMenuItem_Cocoa_Macos_Nsmenuitem - Fatal编程技术网

Cocoa 显示主机菜单时更新NSMenuItem

Cocoa 显示主机菜单时更新NSMenuItem,cocoa,macos,nsmenuitem,Cocoa,Macos,Nsmenuitem,我有一个NSMenuItem,我需要更新它以显示进度(就像时间机器的备份一样)。问题是,当我在NSMenuItem上设置新的title时,title没有改变 事实上,当我关闭并重新打开菜单时,它正在改变,但我想在用户查看菜单时更新它 我还尝试删除一个项目并重新插入,但没有结果 有任何指针吗?如果您的更新代码在菜单跟踪过程中使用的中运行,那么这实际上不需要额外的工作。这是NSEventTrackingRunLoopMode,但您可能只想使用NSRunLoopCommonModes,以便在下拉菜单时

我有一个
NSMenuItem
,我需要更新它以显示进度(就像时间机器的备份一样)。问题是,当我在
NSMenuItem
上设置新的
title
时,
title
没有改变

事实上,当我关闭并重新打开菜单时,它正在改变,但我想在用户查看菜单时更新它

我还尝试删除一个项目并重新插入,但没有结果


有任何指针吗?

如果您的更新代码在菜单跟踪过程中使用的中运行,那么这实际上不需要额外的工作。这是
NSEventTrackingRunLoopMode
,但您可能只想使用
NSRunLoopCommonModes
,以便在下拉菜单时菜单项标题正确

下面是一个简单的菜单项
foo
示例,用于计算应用程序启动后的秒数:

- (void)doStuff;
{
    static int i = 0;
    [foo setTitle:[NSString stringWithFormat:@"%d", ++i]];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification;
{
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
                                [self methodSignatureForSelector:@selector(doStuff)]];
    [invocation setTarget:self];
    [invocation setSelector:@selector(doStuff)];
    [[NSRunLoop mainRunLoop] addTimer:[NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES] forMode:NSRunLoopCommonModes];
}

非常有价值的回答。这是人们第一次遇到菜单runloop时遇到的一个非常常见的问题。你完全正确,Nicholas尝试使用
performSelector:afterDelay:
,它在
NSDefaultRunLoopMode
上运行。非常感谢你的回答。