Έλεγχος για το Internet Connectivity του στόχου C

ψήφοι
15

Έχω ήδη εργάζονται μέσω του iPhone Στάνφορντ Κωδικοποίηση πορεία και σήμερα συνδέοντας στο Twitter API. Αυτό που θα ήθελα να κάνω είναι ακριβώς να χειριστεί δύο συνθήκες σφάλματος: Μία για το πότε το όνομα χρήστη δεν είναι έγκυρη, και άλλο όταν η συσκευή δεν είναι συνδεδεμένη στο διαδίκτυο. Δυστυχώς, ως έχει, το καλύτερο που μπορώ να υποθέσουμε είναι εάν ή όχι η επιστροφή από το API είναι μηδενική ή όχι - πράγμα που συμβαίνει και για τις δύο συνθήκες.

Αυτό που ψάχνω είναι μια γραμμή ή δύο κώδικα που μπορεί να ελέγξει για μια σύνδεση πριν επιχειρήσετε οποιαδήποτε φέρω απομακρυσμένων δεδομένων. Θα μπορούσα να κοσκινίσει μέσω της τεκμηρίωσης της Apple, αλλά σκέφτηκα: Γιατί να μην θέσει το ερώτημα σε σας παιδιά για το καλό μου και ίσως αυτό των άλλων;

Πρόσθετες πληροφορίες: Χρησιμοποιώντας Objective-C και το iPhone SDK στο XCode.

Δημοσιεύθηκε 25/01/2009 στις 16:53
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
30

Ρίξτε μια ματιά σε δείγμα κώδικα της Apple. Το έργο Προσβασιμότητα δείχνει πώς να ανιχνεύσει μια σύνδεση.

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

Απαντήθηκε 25/01/2009 στις 17:35
πηγή χρήστη

ψήφοι
9

Ο κώδικας λειτουργεί, αλλά δεν δημιουργεί πάντα το επιθυμητό αποτέλεσμα.

Ο τρόπος που η στοίβα TCP για το iPhone δουλεύει είναι πολύ διαφορετική από ό, τι θα πρέπει να αναμένεται. Με τον κωδικό «Προσβασιμότητα», μερικές φορές μια σύνδεση δικτύου θα είναι παρόντες, αλλά δεν θα πρέπει να ανιχνεύεται αξιόπιστα. Ωστόσο, την έναρξη MobileSafari στη συνέχεια, επιχειρώντας να ξανασυνδεθούν με τον έλεγχο σύνδεσης με κωδικό «Προσβασιμότητα» θα έχει ως αποτέλεσμα το σωστό αποτέλεσμα.

Ο τρόπος που έχω βρεθεί πιο αποτελεσματικό στον προσδιορισμό σύνδεσης με το δίκτυο είναι να εκτελέσετε έναν έλεγχο NSURLConnection όταν τα φορτία εφαρμογή, σε ένα ξεχωριστό νήμα. Πραγματοποίηση κλήσης σε μια διεύθυνση URL που ξέρετε ότι θα επιστρέψει κάτι σαν «Ναι» (δηλαδή αρχείο HTML στον server ή κάτι σας). Στη συνέχεια, ελέγξτε για να βεβαιωθείτε ότι το επιστρεφόμενο αποτέλεσμα είναι ίσο με το στατικό κείμενο. Με αυτόν τον τρόπο, ξέρετε ότι η στοίβα NSURLConnection φθάνει σωστά, σε αντίθεση με τον κωδικό «Προσβασιμότητα» που δεν εργάζονται αρκετά με συνέπεια.

Απαντήθηκε 10/05/2009 στις 05:45
πηγή χρήστη

ψήφοι
9

Θα πρέπει να διαβάσετε τους κωδικούς σφάλματος και να ανταποκριθεί όσο καλύτερα μπορείτε. Είχα κάποια εμπειρία με αυτό ουσιαστικά μπορεί να εξαρτάται από το ποια υπηρεσία που αλληλεπιδρούν με, αλλά με delicious.com παίρνω λάθος -1012 για την κακή του χρήστη / passwd που αν το ψάξει είναι

NSURLErrorUserCancelledAuthentication =     -1012,

όμως σαφώς ότι η διατύπωση είναι παραπλανητική, αν και με συνέπεια μπορώ να αναπαράγουν τη θέση σε κακή χρήστη / passwd και να πάρει αυτό το κωδικό σφάλματος. Τεχνικά το iPhone δεν είναι ποτέ δεν είναι συνδεδεμένος στο διαδίκτυο, εκτός αν είστε σε κάποια περίεργα περιοχή που έχει προβλήματα με τη σύνδεση δεδομένων. Βλέπω, επίσης, ότι υπάρχει ένας κωδικός σφάλματος

NSURLErrorNotConnectedToInternet =      -1009,

Θα ήθελα να πάω μέσα από NSURLError.h (και υπάρχουν περισσότερο σαν αυτό)

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

και τα λοιπα...

το μόνο που χρειάζεται να κάνετε είναι να πάρετε μια αναφορά στο αντικείμενο NSError θα περάσει in και check είναι ο κωδικός σφάλματος όπως τόσοι

//NSError *returnedError

if([returnedError code] == kERROR_CODE_BAD_USERNAME_OR_PASSWORD)

η σταθερά είναι κάτι που έχω ορίζεται στο δικό μου πηγαίο κώδικα που είναι ουσιαστικά -1012

Απαντήθηκε 25/01/2009 στις 17:31
πηγή χρήστη

ψήφοι
8

αυτό λειτουργεί για μένα και έχει ληφθεί από το μήλο του έργου σεισμική xml:

- (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;
}
Απαντήθηκε 26/03/2009 στις 16:18
πηγή χρήστη

ψήφοι
3

προσβασιμότητα είναι ξεχωριστή κατηγορία, μέσω μπορείτε να αποκτήσετε πρόσβαση στο κώδικα

   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:
    {
    }
}
Απαντήθηκε 20/08/2013 στις 06:40
πηγή χρήστη

ψήφοι
2
-(BOOL)returnInternetConnectionStatus{
    ReachabilityLattest *reach = [ReachabilityLattest reachabilityForInternetConnection];
    NetworkStatus internetStatus = [reach currentReachabilityStatus];
    if ((internetStatus != NotReachable)) {
        return TRUE;
    } else {
        return FALSE;
    }
}
Απαντήθηκε 14/08/2012 στις 07:40
πηγή χρήστη

ψήφοι
2

Όταν χρησιμοποιείτε Προσβασιμότητα αρκούδα της Apple κατά νου ότι μπορείτε να βρείτε τον εαυτό σας να συνδέεται μέσω WWAN (ReachableViaWWAN) ή WiFi (ReachableViaWiFi) χωρίς να είναι συνδεδεμένος στο διαδίκτυο, ακόμη και όταν προσπαθείτε να φτάσετε κάποια υποδοχής, όπως google.com ή apple.com (ίσως μια προσωρινή αποθήκευση θέμα). Κατέληξα να ζητά το δικό μου server και να πάρει πίσω ένα ψηφίο - την καλύτερη λύση στην περίπτωσή μου τουλάχιστον.

Απαντήθηκε 18/05/2011 στις 11:40
πηγή χρήστη

ψήφοι
2

Ποια είναι η τρέχουσα κωδικό σύνδεσης σας μοιάζει; Αν χρησιμοποιείτε NSURLConnection +sendSynchronousRequest:returningResponse:error:, τότε το μόνο που χρειάζεται για να περάσει τη διεύθυνση μιας μεταβλητής NSError και ελέγξτε ότι στη συνέχεια? με connectionWithRequest:delegate:, θα πρέπει να εφαρμόσει -connection:didFailWithError:το πληρεξούσιο.

Απαντήθηκε 25/01/2009 στις 16:59
πηγή χρήστη

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