Question

Avertissement: je suis assez nouveau sur OBJ-C et iOS (5, ARC activé).

L'implémentation suivante d'une méthode nsurlConnectionDelegate crée exc_bad_access dans l'appel nslog à l'intérieur du if:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

    NSLog(@"Response %@", response );
    if([response isKindOfClass:[NSHTTPURLResponse class]])
    {
        NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response;
        NSLog(@"HTTP status code %@", [httpResponse statusCode]);
    }
}

Pour autant que j'ai réussi à le découvrir, l'EXC_BAD_ACCESS est principalement dû à des problèmes d'allocation, à une mauvaise casting et à une mauvaise gestion de la mémoire. Rien de tout cela ne s'applique ici (j'espère).

Merci d'avance, Chris

La solution: Erreur noobie dans le formatage de la chaîne OG. Changez le deuxième NSLOG en:

NSLog(@"HTTP status code %i", [httpResponse statusCode]);
Était-ce utile?

La solution

statusCode retourne un NSInteger (un long ou un int), pas un pointeur vers un NSObject exemple.

Le spécificateur de format %@ est utilisé pour NSObjectS des arguments. Le problème se produit probablement lorsque la valeur entière qui est renvoyée statusCode est interprété / passé comme un pointeur vers un objet, puis envoyé un message ou autrement traité comme un pointeur vers un objet par l'exécution. Lorsqu'un argument d'objet est imprimé via %@ L'enregistreur utilise le résultat de l'objet -[NSObject description].

Vous pouvez éviter ce problème à l'avenir en augmentant vos avertissements de compilateur et en corrigeant les problèmes qu'il génère.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top