Une application iPad fonctionnant correctement sous IOS3 échoue sous IOS4.2 Elle a une classe qui exécute une session http à partir d'une file d'attente d'opérations et l'échec est lié à cette activité. Voici la sortie de la console:L'application IOS4.2 se ferme avec EXC_BAD_ACCESS
Program received signal: “EXC_BAD_ACCESS”.
[Switching to thread 11523]
Exécution NSZombies permis n'a pas révélé quoi que ce soit donc je suis mettais des déclarations NSLog dans le code et a constaté que l'incident se produit lorsqu'une variable locale est modifiée. Voici la section de code:
self.currentOperation = [[[DeduceAccessOperation alloc] init] autorelease];
[self.currentOperation addObserver:self forKeyPath:@"isFinished"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:NULL];
NSLog (@"Start observer added");
[operationQueue addOperation:self.currentOperation];
NSLog (@"Start operation added");
NSLog(@"State is %d", self.status);
self.status = IEnablerServiceUpdating;
NSLog (@"State updated");
Et voici la sortie du journal de la console:
2010-12-08 21:26:44.548 UCiEnabler[5180:307] Start observer added
2010-12-08 21:26:44.550 UCiEnabler[5180:307] Start operation added
2010-12-08 21:26:44.552 UCiEnabler[5180:307] State is 1
Program received signal: “EXC_BAD_ACCESS”.
[Switching to thread 11523]
Il est comme le statut est devenu en lecture seule (sa propriété est déclarée comme atomique et readwrite).
L'autre information pertinente est qu'une vue secondaire vient d'être modifiée et qu'elle déclenche l'appel sur la routine ci-dessus. Son code est:
//Start the update
UCiEnablerAppDelegate *controller = (UCiEnablerAppDelegate *)[[UIApplication sharedApplication] delegate];
[controller deduceIEnablerServiceAccess];
controller.serviceBusy = TRUE; //1.04
Est-ce que quelqu'un a déjà vu quelque chose comme ça?
Est-ce que quelqu'un a des idées où chercher?
Cordialement Robin
Voici la trace de la pile:
#0 0x34a80464 in objc_msgSend
#1 0x3119543e in NSKVOPendingNotificationCreate
#2 0x3119535a in NSKeyValuePushPendingNotificationPerThread
#3 0x3117009a in NSKeyValueWillChange
#4 0x311682c6 in -[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:]
#5 0x311cc718 in _NSSetIntValueAndNotify
#6 0x000097ce in -[IEnablerService startDeducingAccessState] at IEnablerService.m:55
#7 0x00002bc0 in -[UCiEnablerAppDelegate deduceIEnablerServiceAccess] at UCiEnablerAppDelegate.m:100
#8 0x0000a33e in -[RootViewControlleriPad animationDidStop:finished:context:] at RootViewController-iPad.m:43
#9 0x341bb336 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
Dans le futur ** s'il vous plaît ** examinez votre question pour vous assurer que le formatage du code est correct. – JeremyP
Aussi, exécutez ceci dans le débogueur, obtenez la trace de la pile et affichez-la ici. – JeremyP
aucune chance que vous ayez un setter personnalisé pour le statut qui cause le crash? Que se passe-t-il si vous définissez un point d'arrêt sur cette ligne et entrez dans le self.status = IEnablerServiceUpdating? – Rog