2010-10-20 21 views
18

Est-ce que quelqu'un sait dans quelles situations l'initialisation NSURLConnection renvoie zéro à la place de la connexion créée. La documentation dit que c'est possible mais ne précise pas quand cela arrive.Quand le paramètre initWithRequest de NSURLConnection renvoie-t-il

La méthode/message en question:

[[NSURLConnection alloc] initWithRequest:request delegate:self];

-

Selon le NSURLConnection Référence de la classe:

Valeur de retour: La connexion URL pour la requête d'URL. Retourne zéro si une connexion ne peut pas être initialisée.

Le Guide du système Chargement URL de programmation dit ce qui suit:

Si NSURLConnection ne peut pas créer une connexion pour la demande, initWithRequest: délégué: rendement nul.

-

Bien qu'il soit possible que cette méthode renvoie nil, je suis incapable de trouver un scénario qui déclenche cela. J'ai essayé les scénarios suivants:

  • URLRequest avec une URL vide: connection:didFailWithError: méthode déléguée est appelée avec « URL non pris en charge » comme erreur.
  • URLRequest avec l'url invalide: connection:didFailWithError: La méthode delegate est appelée avec "URL incorrecte" comme erreur.
  • URLRequest avec l'url inexistante: connection:didFailWithError: La méthode déléguée est appelée avec "Un serveur avec le nom d'hôte spécifié est introuvable". comme erreur.
  • Demande valide mais pas Internet: connection:didFailWithError: La méthode delegate est appelée avec "La connexion Internet semble être hors ligne". comme erreur.
  • aucune demande: provoque un blocage.

La méthode initWithRequest retourné un NSURLConnection valide dans chaque scénario (en plus de la dernière) et appelé le connection:didFailWithError: avec une erreur appropriée.

Est-ce que quelqu'un a été capable de déterminer quel scénario ne cause pas de retour?

+0

Pourquoi voulez-vous savoir? Si cela n'arrive jamais, ce n'est pas un problème, non? :-) –

+0

Il est arrivé en fait et j'essaie de comprendre ce qui l'a causé. Un testeur italien l'a signalé ... #hint –

+0

Une mise à jour? Toujours pas de réponse satisfaisante ( – Klaas

Répondre

0

Je voudrais essayer tout ce qui précède, sauf dans des conditions de faible mémoire. IE, je pense que cela se produira quand un malloc interne échoue.

+0

Des conseils sur la façon de simuler/tester ceci: y at-il un moyen plus intelligent que d'allouer beaucoup de mémoire? –

1

Je crois que cela peut également être utilisé lorsqu'il échoue à charger, pas seulement initialiser. (Le alloc est fait séparément - c'est là que mem bas vous mordrait probablement) Donc (je devine) il pourrait échouer parce que vous n'aviez pas un réseau disponible (3G/Wifi) ou il a simplement échoué à se connecter au serveur .En tout état de cause, utilisez:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

Pour obtenir l'échec réel.

Vous pouvez simuler ceci en l'absence d'un réseau - ou même en lui donnant une mauvaise URL.

+0

tous les scénarios que vous avez mentionnés, comme je l'ai mentionné dans la question.Pas de connexion réseau/mauvaise URL en effet appeler la connexion: didFailWithError.Mais ce n'est pas la question, je veux savoir quand l'initialisation échoue.Pensez que je vais devoir essayer de simule une situation de mémoire faible –

+0

Si elle retourne zéro, il n'y aura pas de rappels de délégué – BTRUE

0

Je chose que cela est causé si la demande u spécifié a mal ou non toutes les valeurs essentielles

+0

Relisez la question, j'ai testé ces scénarios comme mentionné –

1

Je pense que la réponse est « Jamais ». Semble seulement moyen pour NSURLConnection de renvoyer nil échoue à [super init]. ([super init] renvoyant nil) Mais comme super classe de NSURLConnection est NSObject et NSObjects init retourne juste self (jamais nul)

PS: C'est pour IOS SDK 4.0, sur l'émulateur, peut être différent sur l'appareil.

+0

Ceci est cohérent avec une méthode "init *" - c'est conforme à la règle générale pour 'init' dans les sous-classes NSObject:" Les implémentations de sous-classe de cette méthode doivent initialiser et renvoyer le nouvel objet. nitialisés, ils devraient libérer l'objet et revenir à zéro. " –

+0

Non, je l'ai eu le retour nul avant. – BTRUE

0

NSURLConnection renvoie zéro s'il n'est pas créé dans une boucle d'exécution.