大家。 我想了解,当异步方法具有“didFinish:@selector(SEL)”参数时,我应该如何处理这种情况。 我的代码示例:如何等待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
}
我的清楚,我可以把我想成“authenticationSuccess”方法节结束的代码,但它也很清楚,这是一个错误的一个解决proble方式。有很多这样的情况,我调用一个选择器参数的异步方法,我想找到一个解决方案,为我提供了一个灵活的代码编写。
在此先感谢。
谢谢你的回答,Yuji。 – zkaje 2010-12-02 14:46:44