objective-c - 单实例应用程序 - 激活窗口 - Cocoa

标签 objective-c macos cocoa

我有两个 cocoa 应用程序。 Application1 调用 Application2(abc.app) 如下 -

if ([[NSWorkspace sharedWorkspace] respondsToSelector:@selector(launchApplicationAtURL:options:configuration:error:)])
    return nil != [[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL fileURLWithPath:@"abc.app" isDirectory:NO] options:NSWorkspaceLaunchDefault  configuration:nil error:NULL];

这应该打开 Application2 (abc.app)。现在,如果应用程序 1 再次调用应用程序 2,我想激活 abc.app(如果它在扩展坞中最小化)。我想确保 abc.app 的单个实例正在运行。我们怎样才能实现这一目标?

最佳答案

不太确定您的问题。 Mac OS X 默认情况下仅启动应用程序的一个实例。 (除非您在磁盘上有多个可执行文件的物理副本,但即使在这种情况下,如果具有相同捆绑 ID 的应用程序已在运行,Info.plist 键也会禁止启动应用程序)。

另外,默认情况下,如果 NSWorkspace 没有打开其他窗口,则 NSWorkspace 应该将您的应用程序置于最前面并取消折叠(它的行为应该就像您在 Finder 中再次双击它,或者在它打开时单击它的停靠栏图标一样)已经在运行),它将调用第二个应用程序的“重新打开应用程序”处理程序。

如果它没有这样做,您可以尝试从“重新打开”委托(delegate)方法显式取消折叠主窗口,或者如果您不希望这种情况发生(但为什么不呢?) ,您可以考虑在两个应用程序之间发送 Apple 事件。

此外,您还可以通过查看 runningApplications 并查找具有相同 bundle ID 的条目来检查第二个应用程序是否已在运行。

关于objective-c - 单实例应用程序 - 激活窗口 - Cocoa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22020020/

相关文章:

ios - 将UitableViewCell分成两种颜色

ios - NSArray 的大小

macos - 如何在 Mac OS 上使用 date 命令获取当前星期几?

macos - 较少编译为空的 CSS 文件

objective-c - NSOperationQueue 的线程是父线程还是新线程?

iOS 7 的 canDisplayBannerAds 和旋转?

ios - 在 Objective C 中连接音频缓冲区

macos - 使用 applescript 添加事件监听器

cocoa - NSautorelease 什么时候发布这个?

objective-c - 在 Cocoa 中动态获取硬盘大小