2016-04-28 68 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];