Ellenőrzés Internet Connectivity Objective C

szavazat
15

Már dolgozik a Stanford iPhone Coding során, és jelenleg beleakadnak Twitter API-t. Amit szeretnék csinálni pontosan kezelni két hiba körülmények: az egyik a ha a felhasználónév érvénytelen, és egy másik, amikor a készülék nem csatlakozik az internethez. Sajnos ebben a formában, a legjobb, amit sejteni van-e vagy sem a visszatérés a API nulla vagy sem -, amely esetében mindkét feltétel.

Amit keresek egy-két sornyi kód, amely ellenőrizheti a kapcsolat, mielőtt bármilyen letölteni távoli adatok. Tudtam szitál az Apple dokumentáció de gondoltam: miért nem tette fel a kérdést, hogy ti az én javára, és talán, hogy a többiek?

További info: Objective-C és az iPhone SDK XCode.

A kérdést 25/01/2009 16:53
a forrás felhasználó
Más nyelveken...                            


8 válasz

szavazat
30

Vessen egy pillantást az Apple minta kódját. Az elérhetőségi projekt azt mutatja, hogyan lehet felismerni a kapcsolatot.

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

Válaszolt 25/01/2009 17:35
a forrás felhasználó

szavazat
9

Ez a kód működik, de nem mindig hozza létre a kívánt eredményt.

Az utat, hogy a TCP stack az iPhone működik nagyon különbözik attól, amit ki kell számítani. A „hatósugár” kód, néha egy hálózati kapcsolat is jelen lesz, de nem lesz megbízhatóan kimutatható. Azonban indít MobileSafari majd reattempting ellenőrizni kapcsolat „hatósugár” kód fog eredményezni a helyes eredményt.

Az út, amit találtam a leghatékonyabbnak meghatározó hálózati kapcsolat, hogy fut egy NSURLConnection ellenőrzést, ha az alkalmazás betöltődik, egy külön téma. Hívjuk fel a URL hogy tudod vissza fog térni, mint valami „Yes” (azaz HTML-fájl a szerveren, vagy valami). Ezután ellenőrizze, hogy a visszaadott eredmény egyenlő a statikus szöveget. Így, ha tudjuk, hogy a NSURLConnection verem elérve megfelelően, szemben a „hatósugár” kód, amely nem egészen működik következetesen.

Válaszolt 10/05/2009 05:45
a forrás felhasználó

szavazat
9

El kell olvasni a hibakódot, és válaszoljon a lehető legjobban tudod. Elegem van némi tapasztalata ezzel lényegében függhet, milyen szolgáltatás van kölcsönhatásban, de delicious.com kapok hiba -1012 rossz felhasználó / passwd, amely, ha megnézi fel van

NSURLErrorUserCancelledAuthentication =     -1012,

bár nyilvánvalóan ez a megfogalmazás félrevezető, bár következetesen megismételni üzembe rossz user / passwd és egyre, hogy hibakódot. Technikailag az iPhone soha nem csatlakozik az internethez, hacsak nem valami furcsa régió problémái vannak adatkapcsolatot. Látom még van egy hiba kód

NSURLErrorNotConnectedToInternet =      -1009,

Mennék át NSURLError.h (és még több ilyesmi)

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

stb...

csak annyit kell tennie, hogy egy hivatkozás a NSError objektum telt és ellenőrizze ez a hibakód, mint oly

//NSError *returnedError

if([returnedError code] == kERROR_CODE_BAD_USERNAME_OR_PASSWORD)

a konstans valami, amit meghatározott saját forráskódját, amely lényegében -1012

Válaszolt 25/01/2009 17:31
a forrás felhasználó

szavazat
8

ez nekem dolgozik, és ki kell venni alma szeizmikus xml projekt:

- (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;
}
Válaszolt 26/03/2009 16:18
a forrás felhasználó

szavazat
3

elérhetőség van külön osztályt keresztül érheti el a kódot

   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:
    {
    }
}
Válaszolt 20/08/2013 06:40
a forrás felhasználó

szavazat
2
-(BOOL)returnInternetConnectionStatus{
    ReachabilityLattest *reach = [ReachabilityLattest reachabilityForInternetConnection];
    NetworkStatus internetStatus = [reach currentReachabilityStatus];
    if ((internetStatus != NotReachable)) {
        return TRUE;
    } else {
        return FALSE;
    }
}
Válaszolt 14/08/2012 07:40
a forrás felhasználó

szavazat
2

Amikor az Apple hatósugár szem előtt tartani, hogy akkor találja magát, hogy csatlakozik, WWAN (ReachableViaWWAN) vagy WiFi (ReachableViaWiFi) anélkül, hogy csatlakozik az internethez akkor is, ha megpróbálja elérni néhány gazda például a google.com vagy apple.com (talán egy caching probléma). Így végül hívja a saját szerver és kapok vissza számjegy - a legjobb megoldás az én esetemben legalábbis.

Válaszolt 18/05/2011 11:40
a forrás felhasználó

szavazat
2

Mi a jelenlegi csatlakozási kódot néz ki? Ha használ NSURLConnection +sendSynchronousRequest:returningResponse:error:, akkor csak meg kell, hogy adja át a címben szereplő NSError változó, és ellenőrizze, hogy ezt követően; A connectionWithRequest:delegate:, akkor végre kell hajtania -connection:didFailWithError:a küldöttet.

Válaszolt 25/01/2009 16:59
a forrás felhasználó

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