2016-04-28 70 views
1
NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
     if (error) 
     { 
      NSLog(@"Did fail with error %@" , [error localizedDescription]); 
      fail(); 
      return ; 
     } 
     else 
     { 
     } 

我用dataTaskWithRequest發送異步HTTP請求和完成塊,我想運行一個python script完成。如何等待NSTask在異步塊

NSTask * task = [[NSTask alloc] init]; 
    [task setLaunchPath:kPythonPath]; 
    [task setArguments:@[self.scriptFileFullPath,outputFile]]; 
    [task launch]; 
    [task waitUntilExit]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkPythonTaskStatus:) name:NSTaskDidTerminateNotification object:task]; 

python任務可能需要很長時間,所以我應該等待它的完成。但NSTaskDidTerminateNotification將不會被髮送,因爲NSTask正在單獨的線程中運行。任何人都知道如何等待NSTask在這種情況下完成?

回答

2

NSTask有一個屬性terminationHandler

當任務完成時調用完成塊。任務 對象被傳遞給該塊以允許訪問任務參數,例如 以確定任務是否成功完成。


NSTask * task = [[NSTask alloc] init]; 
task.launchPath = kPythonPath; 
task.arguments = @[self.scriptFileFullPath, outputFile]; 
task.terminationHandler = ^(NSTask *task){ 
// do things after completion 
}; 
[task launch];