J'ai cherché mais je ne peux pas voir une question similaire.
J'ai ajouté une méthode pour vérifier une connexion Internet par exemple accessibilité. Cela fonctionne la plupart du temps, mais lorsqu'il est installé sur l'iPhone, il échoue assez souvent, même lorsque je dispose de la connectivité Internet (seulement lorsque vous êtes sur 3G / Edge - WiFi est OK). P>
Fondamentalement, le code ci-dessous renvoie NON. P>
Si je passe à une autre application, par exemple mail ou safari, puis connectez-vous, puis revenez à l'application, le code indique que Internet est accessible. Un peu semble avoir besoin d'un «nudge». P>
Quelqu'un a-t-il déjà vu cela? Des idées? P>
Merci beaucoup
James p> } p> p>
4 Réponses :
On dirait que vous avez supprimé un code de base de l'accessibilité de l'exemple Apple. Que se passe-t-il lorsque vous le laissez intact et fais cela?
Toutes mes excuses, je suis un peu noob. J'ai ajouté l'exemple de cours d'accessibilité à mon projet, mais je ne peux pas compiler. Accessibilité * hostreach = [[accessibilité accessibilité accessiblesWithHostName: @ "www.apple.com"] conserver]; Ne fonctionne pas. Ne peut pas trouver la méthode accessibilisabilitéWithHostName. Je vais continuer à peaufiner ...
Cela fonctionne: + (bool) DoweHaveInteNetConnection2 {Si ([[[[[[[accessibilité ShareDeDeaçabilité] InternetConnectionStatus] == noturefable) {retour non; } else {retour oui; }}
Ce code vous donne toujours "noconnected" si connecté. Mais une fois que cela se rend à la méthode "accessible enchantée", il vous donne un statut correct. Alors, comment obtenir le statut correct en premier lieu?
+ (BOOL) doWeHaveInternetConnection2{
if([[Reachability sharedReachability] internetConnectionStatus] == NotReachable) {
return NO;
}
else
{
return YES;
}
}
(sorry, code format didn't work in comment)
L'appel à + ShareDeacher code> me dit que vous utilisez une version d'accessibilité pré-2.0. La dernière version a été postée par semaine il y a une semaine et cela fonctionne beaucoup mieux que celui qui a utilisé un singleton. La réponse de Matt ci-dessous est basée sur la dernière version, c'est pourquoi vous aviez du mal à le compiler. Prenez la dernière version et voyez si cela convient mieux à vos besoins.
avec la version 2, le code doit être: } p> p>
// accessibilitéLEforinterNetConnection- vérifie si l'itinéraire par défaut est disponible. // doit être utilisé par les applications qui ne se connectent pas à un hôte particulier
Testez cette dernière nuit sur le périphérique iPhone, en mode avion, ce code a renvoyé un oui, mais lors de la récupération d'une URL, elle a échoué. Donc je ne l'utiliserais pas. Retour à la vérification de la connexion à un hôte particulier.
Test d'une connexion à un hôte particulier à l'aide de la réjouissabilitéWithHostName retournera un faux positif, apparemment à tout moment, votre téléphone a été attribué une adresse IP. Essayez-le: Débranchez le câble de votre routeur sans fil pendant que votre téléphone est connecté à celui-ci et vérifiez le résultat de [Accès accessible à l'accessibilitéWithHostName:] Ce sera oui à chaque fois, même si vous ne pouvez évidemment pas atteindre l'hôte.
Ce que j'ai trouvé, c'est que vous devez être au courant de quel thread (Runloop) à partir de laquelle vous appelez d'abord Si vous partagez des instances, vous saisissez peut-être un singleton comme dans startnotiner code>. Si vous l'appelez à partir d'un fil d'arrière-plan ou nsoperation code>, vous démarrerez la boucle de notifiant sur la boucle d'exécution de ce fil. P>
[accessibilité accessible à l'accessibilitéForIntConnection] code>, il apparaît à partir du code actuel (2.0) que le dernier invocateur gagne et obtient le notifiant défini sur sa boucle d'exécution. p>