Objective c Window总是想超越其他人-Xcode

Objective c Window总是想超越其他人-Xcode,objective-c,xcode,cocoa,window,automator,Objective C,Xcode,Cocoa,Window,Automator,“我的应用程序”具有打开自动程序工作流的按钮,如下所示: - (IBAction)actionname:(id)sender { NSTaskname = [[NSTask alloc] init]; [NSTaskname setLaunchPath:@"/usr/bin/automator"]; NSArray *arguments; arguments = [NSArray arrayWithObjects:@"/Applications/appname.a

“我的应用程序”具有打开自动程序工作流的按钮,如下所示:

- (IBAction)actionname:(id)sender {
    NSTaskname = [[NSTask alloc] init];
    [NSTaskname setLaunchPath:@"/usr/bin/automator"];
    NSArray *arguments;
    arguments = [NSArray arrayWithObjects:@"/Applications/appname.app/Contents/Resources/workflowname.workflow", nil];
    [NSTaskname setArguments:arguments];
    [NSTaskname launch];                                                                             
}
唯一的问题是,每个人都出现在我的应用程序窗口后面。此外,一个工作流会启动另一个应用程序,该应用程序也会出现在窗口后面


如何修复此问题?

您可能可以使用NSRunningApplication将NSTask进程带到前端,其PID如下所示

NSRunningApplication* app = [NSRunningApplication runningApplicationWithProcessIdentifier:[NSTaskname processIdentifier]];
[app activateWithOptions: NSApplicationActivateAllWindows];
如果您需要激活一个特定的应用程序,例如启动另一个应用程序的工作流,那么您可以使用该应用程序的包标识符来执行此操作。此示例将激活Safari

NSArray* apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.Safari"];
[(NSRunningApplication*)[apps objectAtIndex:0] activateWithOptions: NSApplicationActivateAllWindows];

这两个都不管用。唯一的变化是,它会在另一个应用程序中闪烁,但随后会立即返回。在我的应用程序中禁用windows如何?我给了您使用NSRunningApplication来操作活动应用程序的想法。你看过那门课了吗?看看它还能做什么?我认为它可以帮助你从你的评论中获得想法。检查“hide”命令和其他命令。您应该将变量命名为“NSTaskname”以外的名称,因为该名称意味着(a)它是一个类(因为它的名称以大写字母开头),而不是一个变量,以及(b)它指代某种名称,而不是一个NSTask对象。