Verificarea Pentru conectivității la Internet în obiectivul C

voturi
15

Am fost de lucru prin intermediul iPhone Stanford Coding curs și agățare în prezent în Twitter API. Ceea ce aș vrea să fac este ocupe cu exactitate două condiții de eroare: unul pentru atunci când numele de utilizator este invalid, și un altul pentru atunci când dispozitivul nu este conectat în prezent la Internet. Din păcate, în stadiul actual, tot ce pot bănui dacă este sau nu revenirea de la API este zero sau nu - care este cazul pentru ambele condiții.

Ceea ce caut este o linie sau două de cod care poate verifica o conexiune înainte de a încerca orice preluarea de date la distanță. Aș putea trece prin documentația de la Apple, dar m-am gândit: de ce nu pune întrebarea la voi pentru beneficiul meu și, probabil, cea a altora?

Informatii suplimentare: Utilizarea Objective-C și iPhone SDK în XCode.

Întrebat 25/01/2009 la 16:53
sursa de către utilizator
În alte limbi...                            


8 răspunsuri

voturi
30

Aruncati o privire la mostre de cod Apple. Proiectul arată cum să Accesibilitatea detecta o conexiune.

http://developer.apple.com/iphone/library/samplecode/Reachability/index.html

Publicat 25/01/2009 la 17:35
sursa de către utilizator

voturi
9

Acest cod funcționează, dar nu creează întotdeauna rezultatul dorit.

Modul în care stiva TCP pe iPhone funcționează este foarte diferit de ceea ce ar trebui să fie de așteptat. Cu codul „Accesibilitate“, uneori, o conexiune de rețea va fi prezent, dar nu va fi detectată în mod fiabil. Cu toate acestea, lansarea MobileSafari apoi reattempting pentru a verifica conectivitatea cu codul „Accesibilitate“ va duce la rezultatul corect.

Modul în care am găsit cele mai eficiente în determinarea de conectare la rețea este de a rula o verificare NSURLConnection atunci când sarcinile de aplicare, într-un fir separat. Efectuarea unui apel la o adresă URL care știți că se va întoarce ceva de genul „Da“ (adică un fișier HTML pe serverul dvs. sau ceva). Apoi, verificați pentru a fi sigur că rezultatul returnat este egal cu text static. În acest fel, știi că stiva NSURLConnection este de a ajunge în mod corespunzător, spre deosebire de codul „Accesibilitate“, care nu funcționează destul de consecvent.

Publicat 10/05/2009 la 05:45
sursa de către utilizator

voturi
9

Va trebui să citiți în codurile de eroare și pentru a răspunde cât mai bine. Am avut ceva experiență în acest mod esențial, poate depinde de ce serviciu pe care interacționează cu, dar cu delicious.com I a lua eroare -1012 pentru rău utilizator / passwd care, dacă l-ați privi în sus este

NSURLErrorUserCancelledAuthentication =     -1012,

deși în mod clar că formularea este înșelătoare, deși pot reproduce în mod constant punerea în utilizare rea / passwd si obtinerea codul de eroare. Punct de vedere tehnic iPhone nu este niciodată nu este conectat la internet, dacă nu sunteți într-o regiune stranie care are probleme cu conexiunea de date. Eu văd, de asemenea, există un cod de eroare

NSURLErrorNotConnectedToInternet =      -1009,

Mi - ar trece prin NSURLError.h (și sunt mai mult ca asta)

NSURLErrorUnsupportedURL =          -1002,
NSURLErrorCannotFindHost =          -1003,
NSURLErrorCannotConnectToHost =         -1004,
NSURLErrorNetworkConnectionLost =       -1005,

etc ...

tot ce trebuie să faceți este să obțineți o referință la obiectul NSError ai trecut în verif este codul de eroare de genul asa

//NSError *returnedError

if([returnedError code] == kERROR_CODE_BAD_USERNAME_OR_PASSWORD)

constanta este ceva ce am definit în propriul meu cod sursă, care este, în esență -1012

Publicat 25/01/2009 la 17:31
sursa de către utilizator

voturi
8

acest lucru funcționează pentru mine și este luat de la Apple proiect xml seismice:

- (BOOL)isDataSourceAvailable
{
    static BOOL checkNetwork = YES;
    if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
        checkNetwork = NO;

        Boolean success;    
        const char *host_name = "twitter.com"; // your data source host name

        SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
        SCNetworkReachabilityFlags flags;
        success = SCNetworkReachabilityGetFlags(reachability, &flags);
        _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
        CFRelease(reachability);
    }
    return _isDataSourceAvailable;
}
Publicat 26/03/2009 la 16:18
sursa de către utilizator

voturi
3

accesibilități este o clasă separată prin puteți accesa codul

   Reachability *curReach = [Reachability reachabilityForInternetConnection];
NetworkStatus netStatus = [curReach currentReachabilityStatus];
switch (netStatus)
{
    case NotReachable:
    {
        UIAlertView *connectionAlert = [[UIAlertView alloc] init];
        [connectionAlert setTitle:@"Error"];
        [connectionAlert setMessage:@"Please check your network connection."];
        [connectionAlert setDelegate:self];
        [connectionAlert setTag:1];
        [connectionAlert addButtonWithTitle:@"Back"];
        [connectionAlert show];

        break;
    }
    case ReachableViaWWAN:
    {


    }
    case ReachableViaWiFi:
    {
    }
}
Publicat 20/08/2013 la 06:40
sursa de către utilizator

voturi
2
-(BOOL)returnInternetConnectionStatus{
    ReachabilityLattest *reach = [ReachabilityLattest reachabilityForInternetConnection];
    NetworkStatus internetStatus = [reach currentReachabilityStatus];
    if ((internetStatus != NotReachable)) {
        return TRUE;
    } else {
        return FALSE;
    }
}
Publicat 14/08/2012 la 07:40
sursa de către utilizator

voturi
2

Atunci când se utilizează Apple urs accesibilității în vedere faptul că puteți găsi te a fi conectat prin WWAN (ReachableViaWWAN) sau WiFi (ReachableViaWiFi), fără a fi conectat la internet chiar și atunci când încercați să ajungă la o anumită gazdă cum ar fi google.com sau apple.com (poate un cache problema). Am ajuns de asteptare propriul meu server și obținerea înapoi o cifră - cea mai bună soluție în cazul meu, cel puțin.

Publicat 18/05/2011 la 11:40
sursa de către utilizator

voturi
2

Care este codul de conexiune la curent arata? Dacă utilizați NSURLConnection +sendSynchronousRequest:returningResponse:error:, atunci ai nevoie doar pentru a trece adresa unei variabile NSError și verificați ulterior; cu connectionWithRequest:delegate:, ar trebui să pună în aplicare -connection:didFailWithError:în delegatului.

Publicat 25/01/2009 la 16:59
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more