2016-04-28 4 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]; 
Смежные вопросы