J'implémente le chargement de données dorsales avec un serveur en créant une NSOperation et en ouvrant NSURLConnections de manière synchrone.NSURLConnection Crashing
Ce code fonctionnait parfaitement dans le simulateur et l'appareil jusqu'à ce que j'ajoute une barre de progression avec des notifications remontant au thread principal.
- (void)start {
// stop execution if it's cancelled
if([self isCancelled]) {
[self willChangeValueForKey:@"isFinished"];
finished = YES;
[self didChangeValueForKey:@"isFinished"];
return;
}
// If the operation is not canceled, begin executing the task.
[self willChangeValueForKey:@"isExecuting"];
[NSThread detachNewThreadSelector:@selector(main) toTarget:selfwithObject:nil];
executing = YES;
[self didChangeValueForKey:@"isExecuting"];
}
Maintenant, je reçois EXC_BAD_ACCESS se bloque dans l'appel synchrone.
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/index.php", rootURL]];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:[bodyString dataUsingEncoding:NSUTF8StringEncoding]];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
NSError *error = nil;
NSURLResponse *response = nil;
receivedData = [[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error] mutableCopy];
Le stacktrace fonctionne comme suit:
#0 0x3430debc in objc_msgSend()
#1 0x3136f996 in NSPopAutoreleasePool()
#2 0x31374160 in -[NSAutoreleasePool release]()
#3 0x331a0408 in _UIApplicationHandleEvent()
#4 0x325339c4 in PurpleEventCallback()
#5 0x3147a52a in CFRunLoopRunSpecific()
#6 0x31479c1e in CFRunLoopRunInMode()
#7 0x3314ec08 in -[UIApplication _run]()
#8 0x3314d230 in UIApplicationMain()
#9 0x00002ab0 in main (argc=1, argv=0x2ffff504)
Avec NSZombieEnabled, je reçois
*** -[NSDateComponents release]: message sent to deallocated instance 0x172fd0
Je sais que la connexion est établie (examiné les journaux de serveur, et la demande Traverse). Aucun objet NSDateComponent n'est alloué nulle part dans le code NSOperation avant le NSURLConnection.
J'ai essayé de trouver ce que je me suis soudainement mal passé avec NSURLConnection pour qu'il me déteste ainsi.
Toute aide est grandement appréciée!
J'ai essayé d'utiliser ASIHTTPRequest, et il obtient des erreurs en essayant de décompresser mes données de réponse. Jamais arrivé avec NSURLConnection. – serpah