sprawdzanie zasięgu iPhone ' a

Znalazłem kilka przykładów kodu do robienia tego, co chcę (sprawdź osiągalność), ale żaden z nich nie wydaje się być wystarczająco dokładny, aby był przydatny dla mnie. Nie mogę zrozumieć, dlaczego to nie chce być miłe.

Mam dostęp.h / m w moim projekcie, robię
#import <SystemConfiguration/SystemConfiguration.h>

I dodałem framework. Mam też:

#import "Reachability.h"

Na górze .m, w którym próbuję wykorzystać osiągalność.

Reachability* reachability = [Reachability sharedReachability];
[reachability setHostName:@"http://www.google.com"];    // set your host name here
NetworkStatus remoteHostStatus = [reachability remoteHostStatus];

if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFiNetwork) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaCarrierDataNetwork) {NSLog(@"cell"); }
To przysparza mi wielu problemów. Co robię źle? Jestem w porządku koder, po prostu mam trudny czas, gdy przychodzi czas, aby dowiedzieć się, co należy umieścić, gdzie włączyć to, co chcę zrobić, niezależnie od tego, czy chcę wiedzieć, co chcę zrobić, czy nie.

Aktualizacja: to się dzieje. Jest to moim zdaniem kontroler, który mam

#import <SystemConfiguration/SystemConfiguration.h>

I

#import "Reachability.h"

Skonfigurować z. To moja najmniej ulubiona część programowania.problemy z osiąganiem http://sneakyness.com/reachability.png


FWIW, nigdy nie zakończyliśmy implementacji tego w naszym kodzie. Dwie funkcje, które wymagały dostępu do Internetu (wejście do loterii i zakup dvd), nie były głównymi funkcjami. Nic innego nie wymaga dostępu do Internetu.

Zamiast dodawać więcej kodu, po prostu ustawiamy tło obu widoków internetowych na powiadomienie informujące użytkowników, że muszą być podłączeni do Internetu, aby korzystać z tej funkcji. Było w temacie z resztą interfejs aplikacji, i został wykonany dobrze / gustownie. Nie powiedzieli nic o tym podczas procesu zatwierdzania, jednak otrzymaliśmy osobisty telefon, aby sprawdzić, czy rozdajemy przedmioty, które rzeczywiście dotyczyły filmu. Zgodnie z ich zazwyczaj niejasnym porozumieniem, nie możesz mieć loterii inaczej.

Myślę również, że jest to ściśle zgodne z ich ideologią "używaj tylko wtedy, gdy ich absolutnie potrzebujesz".

Oto link iTunes do aplikacji, EvoScanner.

Author: Kara, 2009-12-07

5 answers

Z twojego zrzutu ekranu wynika, że nie masz możliwości dotarcia do twojego projektu. Musisz pobrać Reachability z Apple:

Https://developer.apple.com/library/content/samplecode/Reachability/Introduction/Intro.html

I dodać oba .h i .pliki m do twojego projektu.

Aktualizacja: zauważyłeś, że masz osiągalność. Ale patrząc na najnowszą wersję, widzę, dlaczego masz wymienione błędy - zmienili API i prawdopodobnie używasz przykładowy kod, który znalazłeś gdzieś indziej. Try:

W .plik h:

//import Reachability class
#import "Reachability.h"

// declare Reachability, you no longer have a singleton but manage instances
Reachability* reachability;

W .plik m:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];

reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];

NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

 if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }

.....

- (void) handleNetworkChange:(NSNotification *)notice
{

  NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

   if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }
}
 65
Author: Kendall Helmstetter Gelner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-02 16:58:52
[reachability setHostName:@"http://www.google.com"];
Uwaga! Napotkałem problem, że zawsze jest "nieosiągalny", jeśli używany jest prefiks http://.

Rafał

 28
Author: Raphael Schaad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-16 03:26:25

Oto odpowiedni kod, który działa dla mnie dzisiaj!!!

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNetworkChange:) name: kReachabilityChangedNotification object: nil];

reachability = [Reachability reachabilityForInternetConnection];

[reachability startNotifier];

NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }
 7
Author: nikoz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-15 10:39:02

Czy masz gdzieś następujący kod?

[reachability startNotifier];

Jeśli kod dostępu pochodzi z przykładu firmy apple, musisz to zrobić, zanim firma zacznie raportować Ci aktualizacje statusu.

 3
Author: Kevlar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 17:59:12

Zmień to

reachability = [Reachability reachabilityForInternetConnection];

Do tego

reachability = [[Reachability reachabilityForInternetConnection] retain];
 -3
Author: mhrrt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-11 11:12:29