0

我是 objetive-c 的新手,因为我来自 Java (Android),然后是一点 AppleScript。

所以我的应用程序正在进行 git 提交。但是如您所知,终端具有用户可能想要查看的输出。所以我应该继续在幕后使用我的 NSTask,还是应该只使用 AppleScript 并让用户从终端继续。主要是我的 push.m 看起来像这样:

#import "Push.h"

@implementation Push

@synthesize test;
@synthesize dirPath;


-(IBAction)chooseFolder:(id)sender{

    dirPath = [self get];
    NSArray *array = [dirPath componentsSeparatedByString:@"/"];
    NSString *pub = [array lastObject];
    [projectName setStringValue:pub];

    BOOL fileyn = [self check:dirPath];

    if(fileyn) {

    } else {

    }

}
-(IBAction)pushAction:(id)sender {
    [self push];
    [self push];
}

-(void)push{ 

    if(dirPath == nil || dirPath == @"") {
        [self chooseFolder:nil];
    }

    NSString *commitText = [commitMessage stringValue];
    [commitMessage setStringValue:@""];
    commitText = [NSString stringWithFormat:@"%@",commitText];

    if (i == 1) {

    } else {
        [self runScript:dirPath:@"add" :@"*" :nil];
        [self runScript:dirPath:@"commit" :@"-m" :commitText];
        [self runScript:dirPath:@"push" :@"origin" :@"HEAD"];
    }

}

-(void) runScript:(NSString *) path:(NSString* )cmd1:(NSString *) cmd2:(NSString *) cmd3{

    NSTask *aTask = [[NSTask alloc] init];

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

    NSFileHandle *file;
    file = [pipe fileHandleForReading];

    NSArray* args = [NSArray arrayWithObjects:cmd1,cmd2,cmd3, nil];
    [aTask setArguments:args];
    [aTask setCurrentDirectoryPath:path];
    [aTask setLaunchPath:@"/usr/local/git/bin/git"];
    [aTask setArguments:args];
    [aTask launch];

    [finished setStringValue:@"finished"];

}

-(IBAction)back:(id)sender{

    test = [[NSWindowController alloc] initWithWindowNibName:@"POP"];
    [test showWindow:self];
    [window close];

}


-(BOOL)check:(NSString *) pow{
    BOOL isFile = [[NSFileManager defaultManager] fileExistsAtPath:pow isDirectory:NO];

    return isFile;
}


-(NSString *)get {  

    NSOpenPanel *panel = [NSOpenPanel openPanel];
    [panel setAllowsMultipleSelection:NO];
    [panel setCanChooseDirectories:YES];
    [panel setCanChooseFiles:NO];
    if ([panel runModal] != NSFileHandlingPanelOKButton) return nil;
    return  [[panel directoryURL] path];
}

@end

所以我该怎么做?有什么要改进的吗?提前致谢!

4

1 回答 1

1

这种应用程序设计完全取决于您;这里没有正确的答案。这取决于您要完成什么,以及您希望允许用户做什么。如果您只是想向用户显示您正在运行的任何命令的输出,您可以简单地从NSTask(使用您设置的输出管道)中获取输出并将其显示在文本视图中供用户查看。

但是,如果您想运行交互式git命令,那就有点复杂了。由于您的问题对“让用户从终端继续”的含义不是很具体,因此我在这里会很困难,因此,如果这不是您的意思,请告诉我。就良好的用户界面和用户体验而言,除非您别无选择,否则强迫某人转到不同的应用程序以继续使用您自己的应用程序几乎不是一个好主意。如果应用程序想要向用户显示结果,最好在应用程序内进行(例如,使用自定义视图或 Web 视图),而不是将用户带到其他地方。如果您希望命令是交互式的,

无论如何,快速浏览一下,您的代码似乎应该可以工作(除了前面提到的注释中的问题,您应该修复它)——而且由于您没有提到它的任何问题,我认为它可以工作。这不是编程问题。这是一个设计问题,你必须自己考虑答案(话虽如此,我投票结束这个问题,因为它并不真正符合 StackOverflow 指南 - 答案是一个问题意见,而不是事实)。

于 2012-06-10T15:28:17.930 回答