1

私が達成しようとしているのはとても単純なことのように思えます.Xcode/Interface Builderができることよりもはるかに少ないです. 私は検索して検索しましたが、答えが思い浮かびませんでしたが、ほとんどの検索でここにたどり着いたので、専門家に尋ねるアカウントを作成しました. 4 つから 5 つのボタンがあり、各ボタンが単純なシェル スクリプトを実行する非常に単純な GUI を作成したいと考えています。ターミナル ウィンドウは必要ありませんが、そのようにすれば 1 つ起動しても問題ありません。シェル スクリプトに加えて、アプリ内にも adb (Android デバッグ ブリッジ) と fastboot ユーティリティが必要です。adb と fastboot およびその他のファイルを Resources フォルダー内に配置する必要があると想定しています。また、シェル スクリプトを Classes フォルダー内に配置する必要があると想定しています。ボタンをスクリプトに接続する方法を知る必要があるだけです。私が見落としているのは単純なものだといいのですが。前もって感謝します。

MacBook Pro 7,1 OSX 10.6.8 Xcode 3.2.6

4

1 に答える 1

8

これを試して :

- (void)runCmd:(NSString *)cmd withArgs:(NSArray *)args
{
    if (task)
    {
        [task interrupt];

    }
    else
    {
        task = [[NSTask alloc] init];
        [task setLaunchPath:cmd];

        [task setArguments:args];

        [pipe release];

        pipe = [[NSPipe alloc] init];
        [task setStandardOutput:pipe];

        NSFileHandle* fh = [pipe fileHandleForReading];

        NSNotificationCenter* nc;

        nc = [NSNotificationCenter defaultCenter];
        [nc removeObserver:self];
        [nc addObserver:self 
               selector:@selector(dataReady:) 
                   name:NSFileHandleReadCompletionNotification 
                 object:fh];
        [nc addObserver:self selector:@selector(dataAvailable:) name:NSFileHandleDataAvailableNotification object:fh];
        [nc addObserver:self 
               selector:@selector(taskTerminated:) 
                   name:NSTaskDidTerminateNotification 
                 object:task];

        [task launch];
        [fh readInBackgroundAndNotify];
    }
}

- (void)dataAvailable:(NSNotification*)n
{
    NSLog(@"Data Available : %@",n);
}

- (void)dataReady:(NSNotification*)n
{
    NSData* d;

    d = [[n userInfo] valueForKey:NSFileHandleNotificationDataItem];

    if ([d length])
    {
        NSLog(@"Data Ready : %@",[[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding]);
        [[[task standardOutput] fileHandleForReading] readInBackgroundAndNotify];
    }
}

- (void) taskTerminated:(NSNotification*)note
{
    [task release];
    task = nil;
}
于 2012-04-10T01:58:25.607 に答える