0

私は Java (Android) から来て、その後 AppleScript を少し使ったので、objective-c は初めてです。

したがって、私のアプリは git commit を行っています。しかし、ご存知のように、端末にはユーザーが見たいと思う出力があります。そのため、舞台裏で 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 に答える