J'ai une erreur bizarre à laquelle je n'arrive pas à trouver de documentation ou de publications. Lorsque j'essaie de me connecter à mon service Web (URL modifiée pour la confidentialité) à l'aide de la méthode de manuel standard, je reçois EXC_BAD_INSTRUCTION ou EXC_BAD_ACCESS sur [NSURLConnection initWithRequest]. La chose la plus étrange est que, à l'occasion, je peux franchir la ligne fautive sans aucune exception, mais 9 fois sur 10, il provoque cette erreur. Aucune suggestion?EXC_BAD_INSTRUCTION avec URLConnection initWithRequest
- (void)viewDidLoad {
NSURL *url = [NSURL URLWithString:@"http://heres/where/my/webservice/url/is/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30.0];
// cancel any old connection
if(connection) {
[connection cancel];
[connection release];
}
// create new connection and begin loading data
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(connection) {
// if the connection was created correctly, release old data (if any), and alloc new
[data release];
data = [[NSMutableData data] retain];
}
[url release];
[request release];
}
Toute aide ou suggestion ou RTFM seront les bienvenues!
Merci zoul, j'utilise Clang maintenant. J'ai supprimé les versions incriminées selon votre suggestion, mais j'ai obtenu la même erreur. –
En outre, pas sûr si cela aide ou non, mais la ligne incriminée semble effectivement être: NSURLRequest * theRequest = [NSURLRequest requestWithURL: url \t \t \t \t cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 60,0]; Et dans la trace, la dernière chose que je peux voir est NSURLProtocolInit. –
La réponse de Zoul est tout à fait correcte, en ce sens que vous envoyez un message 'release' aux objets, quand vous ne les avez pas" initiés ". Donc, vous devriez supprimer ces deux lignes, au moins. De même, vous ne devez pas libérer 'data' à moins d'être' init'ialized dans cette méthode ou dans une autre. Si vous le relâchez avant de l'initialiser, vous obtiendrez une erreur. –