首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTask还是AScript?

NSTask还是AScript?
EN

Stack Overflow用户
提问于 2012-06-10 22:24:54
回答 1查看 197关注 0票数 0

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

因此,我的应用程序正在进行git提交。但是,正如您所知道的,终端具有用户可能想要查看的输出。那么,我应该继续使用我的NSTask作为幕后工作,还是应该只使用AppleScript,让用户从终端继续操作。我的push.m .m主要是这样的:

代码语言:javascript
复制
#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

那么我该怎么做呢?有什么需要改进的地方吗?提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-10 23:28:18

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

但是,如果您想运行交互式git命令,就会变得有点复杂。我在这里有点冒险,因为你的问题没有明确说明“让用户从终端继续”是什么意思,所以如果这不是你的意思,请让我知道。在良好的用户界面和用户体验方面,除非你别无选择,否则强迫别人转到不同的应用程序来继续使用你自己的应用程序几乎从来都不是一个好主意。如果应用程序想要向用户显示结果,最好是在应用程序中(例如,使用自定义视图或web视图),而不是驱使用户到其他地方。如果你想让命令是交互式的,那么在你的应用程序中设计一个界面来处理它要好得多,而不是运行一个AppleScript并引导用户到终端去查看和做事情。

无论如何,快速浏览一下,您的代码看起来应该可以工作(除了前面提到的注释中的问题,您应该修复)-既然您没有提到它有任何问题,我假设它是可以工作的。这不是一个编程问题;这是一个设计问题,你必须自己考虑这个问题的答案(也就是说,我投票决定结束这个问题,因为它并不真正符合StackOverflow的指导方针-答案是一个观点问题,而不是事实问题)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10969470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档