2013-04-02 100 views
0

我正嘗試在我的Cocoa Desktop應用程序中執行創建Cordova項目的命令,但它不起作用。從Cocoa Desktop應用程序執行終端命令

這是我的代碼:

NSTask *task = [NSTask new]; 
    [task setLaunchPath:@"/Documents/Cordova/bin/ ./create ~/Documents/Cordova/HelloWorld2 org.apache.cordova.HelloWorld2 HelloWorld2"]; 
    [task setArguments:[NSArray arrayWithObjects:@"-l", @"-a", @"-t", nil]]; 

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

    [task launch]; 

    NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile]; 

    [task waitUntilExit]; 
    // [task release]; 

    NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSLog (@"got\n%@", string); 

這就是輸出:

2013-04-02 23:48:18.968 Phonegap-ProjectCreator[2209:303] launch path not accessible 
2013-04-02 23:48:18.970 Phonegap-ProjectCreator[2209:303] (
    0 CoreFoundation      0x00007fff8b2b80a6 __exceptionPreprocess + 198 
    1 libobjc.A.dylib      0x00007fff88d7e3f0 objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff8b2b7e7c +[NSException raise:format:] + 204 
    3 Foundation       0x00007fff8bd21cd2 -[NSConcreteTask launchWithDictionary:] + 409 
    4 Phonegap-ProjectCreator    0x0000000100002a4a -[MainWindow createProject:] + 314 
    5 AppKit        0x00007fff94506a59 -[NSApplication sendAction:to:from:] + 342 
    6 AppKit        0x00007fff945068b7 -[NSControl sendAction:to:] + 85 
    7 AppKit        0x00007fff945067eb -[NSCell _sendActionFrom:] + 138 
    8 AppKit        0x00007fff94504cd3 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 1855 
    9 AppKit        0x00007fff94504521 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 504 
    10 AppKit        0x00007fff94503c9c -[NSControl mouseDown:] + 820 
    11 AppKit        0x00007fff944fb60e -[NSWindow sendEvent:] + 6853 
    12 AppKit        0x00007fff944f7744 -[NSApplication sendEvent:] + 5761 
    13 AppKit        0x00007fff9440d2fa -[NSApplication run] + 636 
    14 AppKit        0x00007fff943b1cb6 NSApplicationMain + 869 
    15 Phonegap-ProjectCreator    0x00000001000011d2 main + 34 
    16 libdyld.dylib      0x00007fff89ced7e1 start + 0 
    17 ???         0x0000000000000003 0x0 + 3 
) 

我不明白這是什麼問題?它找不到執行或不能執行的路徑?

回答

3

啓動路徑是要啓動的路徑,而不是要調用的命令行。它應該只包含要運行的可執行文件的路徑。

參數數組是應該傳遞的參數。你在混合這兩個。


您的可執行文件看起來是 「/文件/科爾多瓦/斌/創建」

參數看起來是這樣的:

NSArray *args = @["-l", "~/Documents/Cordova/HelloWorld2", "-a", "org.apache.cordova.HelloWorld2", "-t", "HelloWorld2"]; 

即參數具有值,且值與參數數組中的參數交錯。

+0

我只是想執行帶有參數的可執行文件,我怎麼可以這樣簡單? – cmltkt

1

我找到了解決方案。我對客觀C新手,我意識到我犯了很多錯誤。

這就是解決方案:

/** Path to Application **/ 
NSString *path = @"/Users/username/Documents/Cordova/bin/create"; 

/** Arguments **/ 
NSArray *args = [NSArray arrayWithObjects:@"/Users/username/Documents/Cordova/HelloWorld3",@"org.apache.cordova.HelloWorld3",@"HelloWorld3", nil]; 
[[NSTask launchedTaskWithLaunchPath:path arguments:args] waitUntilExit];