2016-04-28 47 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 
     { 
     } 

私は非同期HTTPリクエストを送信するためにdataTaskWithRequest使用し、完了ブロックでは、私は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タスクの完了に時間がかかることがあります。しかしは、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];