2012-09-18 42 views
2

所以我目前使用下面的代碼檢出的SVN目錄:的iOS:檢查是否SVN結賬與NSTask成功

NSTask *task = [[NSTask alloc] init]; 
NSPipe *checkoutPipe = [[NSPipe alloc] init]; 
[task setLaunchPath:@"/usr/bin/svn"]; 
[task setArguments:[NSArray arrayWithObjects:@"checkout",SVN_URL_OF_PRJECT_DIR,DEST_DIR,@"--username",SVN_USER,@"--password",SVN_PASSWORD,nil]]; 
[task setStandardOutput:checkoutPipe]; 
[task launch]; 

NSFileHandle *file = [checkoutPipe fileHandleForReading]; 
NSData *data = [file readDataToEndOfFile]; 
NSString *checkoutResult = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

NSLog(@"Result: %@",checkoutResult); 

此代碼工作正常,但我想如果退房以編程方式檢查真的很成功嗎?如果結帳成功,NSLog打印「Checked out revision XY.」,但是我觀察到它打印出即使文件實際上不能放入指定目錄(如果目的地路徑不好)。它將打印檢出修訂XY消息以及目的地目錄不好的消息。

所以我的問題是:什麼是測試如果退房完全確定,如何確保完成結賬過程後,檢查完成(我不知道一個好辦法,但不它是異步嗎?還是必須在bg線程中才能成爲異步?)。

回答

3

首先等到任務完成。通過註冊和等待NSTaskDidTerminateNotification

[task waitUntilExit]; 

或異步:這可以是同步完成的。

然後得到進程的退出狀態:

int status = [task terminationStatus]; 

對於大多數命令的0退出狀態意味着沒有錯誤和退出狀態> 0顯示一些錯誤。我確信這適用於svn命令,但您可以使用svn文檔進行檢查。