Cocoa - 创建我的应用程序的多个实例

时间:2015-07-23 11:20:26

标签: macos cocoa nstask nspipe

我的要求是创建我的应用程序的多个实例。 我能够在没有参数的情况下成功创建多个实例,但是当我使用我的runCommand传递一些参数时,它会创建我的应用程序的无限实例并停止这个我必须强行关闭我的系统。

提前致谢:

我的工作代码如下:

- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
    isOpenFileFlag = YES;

    NSString *filePathStr = [NSString stringWithFormat:@"open -n /Applications/MyApp.app --args %@",filename];

    [self runCommand:filePathStr];

    return YES;
}

- (NSString *) runCommand: (NSString *) commandToRun {
    NSTask *task;
    task = [[NSTask alloc] init];
    [task setLaunchPath: @"/bin/sh"];

    NSArray *arguments = [NSArray arrayWithObjects: @"-c" , [NSString stringWithFormat:@"%@", commandToRun], nil];
    NSLog(@"run command: %@",commandToRun);
    [task setArguments: arguments];

    NSPipe *pipe;
    pipe = [NSPipe pipe];
    [task setStandardOutput: pipe];

    NSFileHandle *file;
    file = [pipe fileHandleForReading];

    [task launch];

    NSData *data;
    data = [file readDataToEndOfFile];

    NSString *output;
    output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
    return output;

}

我唯一需要做的就是逐个创建我的应用程序的多个实例。

1 个答案:

答案 0 :(得分:0)

目前您正在创建一个循环,因为每个启动的实例都会启动另一个实例,依此类推。 当你有足够的实例时,你必须停止创建实例。 (Obvious上尉)

我想有多种方法可以做到这一点。您可以检查当前正在运行的应用程序实例数。

另一种方法(我会做什么):首次启动时创建一个NSNumber对象,您可以写入NSPasteBoard。每个其他实例加载该数字并向其添加一个。如果你有正确的计数,请停止循环。