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

Ich benutze dataTaskWithRequest async HTTP-Anfrage zu senden und im Abschluss Block, ich will ein python script laufen.Wie NSTask wartet in Asynchron-Block zu beenden

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]; 

die python Aufgabe so lange dauern kann ich für seine Vollendung warten soll. Aber die NSTaskDidTerminateNotification wird nicht gesendet, da die NSTask in einem separaten Thread ausgeführt wird. Wer weiß, wie man auf NSTask wartet, um in diesem Zustand zu beenden?

Antwort

2

NSTask hat eine Eigenschaft terminationHandler.

Der Abschlussblock wird aufgerufen, wenn der Task abgeschlossen ist. Die Task Objekt wird an den Block übergeben, um den Zugriff auf die Task-Parameter zu ermöglichen, um beispielsweise festzustellen, ob die Task erfolgreich abgeschlossen wurde.


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