Nous essayons d'obtenir une tâche de fond dans le but d'inclure un indicateur d'activité dans un écran de travail. Selon notre compréhension, cela nécessite de créer un fil de fond pour l'exécuter. Je comprends également qu'aucune mise à jour de l'interface graphique ne peut être effectuée sur le thread d'arrière-plan.iPhone SDK: Comment savoir quand la tâche en arrière-plan est terminée?
Étant donné cela, voici le schéma général de ce qui doit arriver.
a.) Pré-valider les champs. Assurez-vous que l'utilisateur n'a entré aucune donnée invalide. b.) Configurez la tâche d'arrière-plan. . c) les résultats du processus de tâche de fond
C'est ce qu'il ressemble dans le code jusqu'à présent:
-(IBAction)launchtask:(id)sender
{
//validate fields
[self validateFields];
/* Operation Queue init (autorelease) */
NSOperationQueue *queue = [NSOperationQueue new];
/* Create our NSInvocationOperation to call loadDataWithOperation, passing in nil */
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(backgroundTask)
object:nil];
/* Add the operation to the queue */
[queue addOperation:operation];
[operation release];
//TO DO: Add any post processing code here, BUT how do we know when it is done???
ConfirmationViewController *otherVC;
//show confirm
//if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
//{
// otherVC = [[ConfirmationViewController alloc] initWithNibName:@"ConfirmationViewPad" bundle:nil];
//}
//else
{
otherVC = [[ConfirmationViewController alloc] initWithNibName:@"ConfirmationView" bundle:nil];
}
//TO DO: Let's put this in a struct
otherVC.strConfirmation = strResponse;
otherVC.strCardType = strCardType;
otherVC.strCardNumber = txtCardNumber.text;
otherVC.strExpires = txtExpires.text;
otherVC.strCustomerEmail = txtEmail.text;
[self.navigationController pushViewController:otherVC animated:YES];
[otherVC release];
otherVC = nil;
}
Jusqu'à présent, qui fonctionne assez bien, sauf que nous n'avons pas encore un moyen de savoir lorsque la tâche d'arrière-plan est terminée. Seulement quand il est complet, pouvons-nous traiter les résultats de la tâche d'arrière-plan. À l'heure actuelle, cela ne fonctionne pas car il n'y a pas de synchronisation avec les deux. Comment résoudre? Une autre chose, a remarqué qu'un spinner est maintenant affiché dans la barre d'état. C'est une bonne chose, mais cela ne semble pas disparaître une fois la tâche terminée. Que faire?
Merci d'avance.
Merci. J'ai essayé la méthode KVO en utilisant ce code ici. http://efreedom.com/Question/1-1049001/Get-Notification-NSOperationQueue-Finishes-Tasks Je reçois la notification que l'opération est terminée MAIS il se trompe avec cela. bool _WebTryThreadLock (bool), 0x885ac40: J'ai essayé d'obtenir le verrou Web à partir d'un thread autre que le thread principal ou le thread Web. Cela peut être le résultat d'un appel à UIKit à partir d'un thread secondaire. Crashing now ... Si cela fait une différence dans le thread d'arrière-plan, je fais un appel ASIHTTPRequest synchrone. – butchcowboy
Que faites-vous lorsque vous recevez la notification KVO? Fais-tu quelque chose UIKit là-bas? – Tommy