Si rien d'autre, ne remet pas start
conjointement avec initWithRequest:delegate:
. Cela commence déjà la demande, donc l'appel manuel à start
tente de le démarrer une deuxième fois, souvent avec des résultats contre-productifs.
Vous ne devez appeler start
que si vous avez appelé initWithRequest:delegate:startImmediately:
avec NO
pour ce troisième paramètre.
En outre, si cette connexion est appelée dans une file d'attente autre que le thread principal, il se peut également que les méthodes NSURLConnectionDelegate
et NSURLConnectionDataDelegate
ne soient pas appelées. Mais, encore une fois, vous ne devriez pas mettre à jour l'interface utilisateur dans un thread d'arrière-plan, donc, je suppose que vous n'essayez pas de le faire dans un thread d'arrière-plan.
Donc, si ce faisant à partir d'un fil d'arrière-plan, vous pourriez faire:
// dispatch this because UI updates always take place on the main queue
dispatch_async(dispatch_get_main_queue(), ^{
[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
});
// now create and start the connection (making sure to start the connection on a queue with a run loop)
NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString:video_link1]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
[connection start];
J'utilise [NSRunLoop mainRunLoop]
ci-dessus. Certaines implémentations (comme AFNetworking) utilisent un autre thread sur lequel l'application a explicitement démarré une autre boucle d'exécution. Le point principal, cependant, est que vous n'utilisez que start
en conjonction avec startImmediately:NO
, et vous n'utilisez que startImmediately:NO
si vous le faites sur quelque chose d'autre que la boucle d'exécution du thread en cours.
Si ce faisant de la file d'attente principale déjà, il est juste:
[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString:video_link1]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
// [connection start]; // don't use this unless using startImmediately:NO for above line
oui vous avez raison Rob – ThananutK