J'ai créé une classe indpendante pour la connexion HTTP. Toute la connexion fonctionne bien. Le problème est que je trouve que la méthode 'didReceiveData' sera appelée APRÈS la méthode qui appelle la connexion. (Méthode « didReceiveData » sera appelée après IBAction « accepter »)Discussion sur la méthode 'didReceiveData' pour la connexion HTTP
- (IBAction)accept:(id)sender {
[self connect:url];
//labelStr = ReturnStr; Cannot be written here.
}
-(void)connect:(NSString *)strURL
{
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:strURL]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection)
{
// receivedData is declared as a method instance elsewhere
receivedData = [[NSMutableData data] retain];
}
else
{
// inform the user that the download could not be made
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// append the new data to the receivedData
[receivedData appendData:data];
ReturnStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
}
Cela entraînera un problème que si je souhaite modifier le texte d'une étiquette à la chaîne reçue, le code ne peut pas être écrit dans IBAction ' accepter », mais doivent être écrits dans la méthode « didReceiveData » comme ceci:
MainViewController *mainView = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
AMEAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.navController pushViewController:mainView animated:YES];
mainView.labelStr.text = ReturnStr;
Un autre problème est que les données sur MainView seront écrasées si je MainView dans initialise « didReceiveData ». Est-il possible pour moi de changer le texte de labelStr sans initialiser MainView?
Y a-t-il quelque chose comme la méthode didFinishLoading? –
Avec sendSynchronousRequest: returnResponse: error:, tout est géré par cette méthode. Au retour de la méthode, la connexion a été ouverte, la demande envoyée, la réponse reçue et la connexion refermée. Tout cela pourrait prendre quelques secondes, cependant. –