Je travaille actuellement sur la lecture de code XML à partir d'une API externe.Erreur étrange avec initWithContentsOfURL
Le code suivant fonctionne très bien:
NSError *error = nil;
NSString *xmlString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
Cependant, je voulais ajouter une gestion des erreurs (« Le serveur ne peut pas être atteint », « Pas de connexion Internet », etc.). Donc, je mets ce bloc en place avec un peu d'aide de l'exemple de code joignabilité:
if ([error code] == kCFURLErrorNotConnectedToInternet) {
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:NSLocalizedString(@"No Internet connection",@"Error message displayed when not connected to the Internet.") forKey:NSLocalizedDescriptionKey];
NSError *noConnectionError = [NSError errorWithDomain:NSCocoaErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:userInfo];
[self handleError:noConnectionError];
} else {
// otherwise handle the error generically
[self handleError:error];
}
La méthode handleError affiche simplement un UIAlertView avec les détails de l'erreur. Lorsque j'ai exécuté l'application sans connexion, je m'attendais à voir mon message d'erreur. Cependant, tout ce que j'obtiens est "l'opération n'a pas pu être complétée (erreur Cocoa 256)" qui, d'après ce que je peux comprendre, est une erreur de lecture générique. Au début, j'ai pensé que cela pourrait être la méthode de TouchXML, mais comme vous pouvez le voir, j'ai changé cela en initWithCOntentsOfURL de NSString.
Quelqu'un peut-il faire la lumière sur ce problème?
Merci,
Rich
P.S .; 'initWithContentsOfURL:' est une méthode synchrone - donc enroulez-la dans un bloc NSOperation/GCD, ou passez à un réseau asynchrone. –