tout le monde. Je veux comprendre, comment je dois gérer des situations lorsqu'une méthode asynchrone a le paramètre "didFinish: @selector (SEL)". Mon exemple de code est:Comment vaut-il mieux attendre qu'une méthode asynchrone soit terminée dans l'application iPhone?
//
// Authentication check
- (void)authenticationSuccess: (GDataServiceTicket*) ticket
authenticatedWithError: (NSError*) error {
if (error == nil)
{
NSLog(@"authentication success");
}
else
{
NSLog(@"authentication error");
}
}
//
- (void) fetchFeedOfSpreadsheets {
//create and authenticate to a google spreadsheet service
if (!(mService))
{
GDataServiceGoogleSpreadsheet *service = [self spreadsheetService];
[mService autorelease];
mService = [service retain];
}
// check autentication success (invoke "authenticationSuccess" method for debug success & error)
[mService authenticateWithDelegate: self
didAuthenticateSelector:@selector(authenticationSuccess:
authenticatedWithError:) ];
// HERE I WANT TO MAKE A PAUSE AND WHAIT THE RESULT, EITHER I AUTHENTICATED OR NOT
// AND MAKE AN "IF" STATEMENT TO CONTINTUE WORKING ON SERVER, OR RETURN ERROR
//fetch retrieves the feed of spreadsheets entries
NSURL *feedURL = [ NSURL URLWithString: kGDataGoogleSpreadsheetsPrivateFullFeed ];
GDataServiceTicket *ticket;
ticket = [mService fetchFeedWithURL: feedURL
delegate: self
didFinishSelector: @selector(spreadsheetsTicket:finishedWithFeed:
error:) ];
// HERE I WANT TO WAIT SECOND TIME. I WANT "spreadsheetsTicket:
// finishedWithFeed:error:" TO PROCCEED ERROR AND PUT A FEED IN SOME NSARRAY OBJECT
// AND AFTER THAT I WANT TO WORK WITH THAT NSARRAY RIGHT HERE
}
Je est clair, que je peux pousser le code que je veux dans la fin de la section de méthode « authenticationSuccess », mais il est également clair que c'est une mauvaise façon de résoudre le problèm. Il y a un certain nombre de situations comme celle-ci, où j'appelle une méthode asynchrone avec un paramètre de sélection, et je veux trouver une solution me fournissant une écriture de code flexible.
Merci d'avance.
Merci pour la réponse, Yuji. – zkaje
Mais modifier gdata-objectivec-client avec des blocs est un moyen plus difficile que de rendre cette logique bublie:/..so .. je suppose que je n'ai pas de choix, et faire des insertions de code dans "didFinish: @selector"? – zkaje