Objective C İnternet Bağlantı İçin Kontrol Etme

oy
15

Kursa Kodlama Stanford iPhone üzerinden çalışan ve halen Heyecan API içine çengel oldum. Cihazın şu anda internete bağlı değilken için kullanıcı adı geçersiz olduğunda One for ve başka: Ne yapmak istiyorum doğru iki hata koşullarının üstesinden olduğunu. Her iki koşullar için geçerlidir ki - bu haliyle maalesef ben yürütebiliriz iyi API dönüş nil olup olmadığını veya değil.

Ne aradığım bir çizgi veya herhangi bir uzak veri getirme denemeden önce bağlantı için kontrol edebilirsiniz kod ikidir. Apple belgelerine elemek olabilir ama ben anladım: Size soruyu değil neden yararına adamlar ve belki başkalarının?

Ek bilgi: Objective-C ve XCode iPhone SDK kullanma.

Oluştur 25/01/2009 saat 16:53
kaynak kullanıcı
Diğer dillerde...                            


8 cevaplar

oy
30

Apple'ın örnek kod bir göz atın. Ulaşılabilirlik projesi bir bağlantı tespit etmek için nasıl gösterir.

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

Cevap 25/01/2009 saat 17:35
kaynak kullanıcı

oy
9

Bu kod çalışır, ama her zaman istenen sonucu oluşturmaz.

iPhone'da TCP yığını çalışma şekli ne beklenmelidir çok farklıdır. "Ulaşılabilirlik" kod ile, bazen bir ağ bağlantısı mevcut olacak, ama güvenilir bir şekilde tespit edilmeyecektir. Ancak, daha sonra MobileSafari başlatılması doğru sonuç sonuçlanacaktır "Ulaşılabilirlik" koduyla bağlantıyı kontrol etmek için yeni bir denemede.

Ben ağ bağlantısı belirlemede en etkili bulduk yolu NSURLConnection kontrolü çalıştırmak için zaman ayrı bir konu uygulama yükler. "Evet" (sunucu veya bir şey üzerinde yani HTML dosyası) gibi bir şey dönecektir bildiğiniz bir URL'ye bir çağrı yapın. Sonra döndü sonuç statik metin eşit olduğundan emin olmak için kontrol edin. Bu şekilde, oldukça tutarlı çalışmıyor "Ulaşılabilirlik" kod aksine NSURLConnection yığını düzgün ulaşıyor biliyoruz.

Cevap 10/05/2009 saat 05:45
kaynak kullanıcı

oy
9

Sen hata kodları okumak ve elinden geldiğince cevap gerekir. Ben aslında ben açın bakın eğer kotu kullanıcı / passwd'ı hatası -1012 olsun ne ile değil delicious.com etkileşimde hizmet bağlı olabilir bu bazı deneyimi yaşadım

NSURLErrorUserCancelledAuthentication =     -1012,

açıkça olsa o ifadeler ben sürekli passwd kötü kullanıcı / koyarak ve bu hata kodunu alıyorsanız çoğaltmak olsa, yanıltıcı. Veri bağlantısı ile sorunları var bazı garip bölgede olmadıkça Teknik iPhone internete bağlı değil asla. Ben de bir hata kodu var bakın

NSURLErrorNotConnectedToInternet =      -1009,

Ben geçip gidebilir NSURLError.h (ve daha bunun gibi vardır)

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

vb...

Yapmanız gereken tüm geçirilen ve check NSError nesnesine bir başvuru olsun o kadar gibi hata kodu var

//NSError *returnedError

if([returnedError code] == kERROR_CODE_BAD_USERNAME_OR_PASSWORD)

sabit esasen -1012 olduğunu ben kendi kaynak kodunda tanımladığınız bir şeydir

Cevap 25/01/2009 saat 17:31
kaynak kullanıcı

oy
8

Bu benim için çalışıyor ve elma sismik xml projesinden alınmıştır:

- (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;
}
Cevap 26/03/2009 saat 16:18
kaynak kullanıcı

oy
3

ulaşılabilirlik kodu erişebilirsiniz aracılığıyla ayrı sınıftır

   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:
    {
    }
}
Cevap 20/08/2013 saat 06:40
kaynak kullanıcı

oy
2
-(BOOL)returnInternetConnectionStatus{
    ReachabilityLattest *reach = [ReachabilityLattest reachabilityForInternetConnection];
    NetworkStatus internetStatus = [reach currentReachabilityStatus];
    if ((internetStatus != NotReachable)) {
        return TRUE;
    } else {
        return FALSE;
    }
}
Cevap 14/08/2012 saat 07:40
kaynak kullanıcı

oy
2

Belki google.com veya apple.com gibi bazı ana bilgisayar (bir önbelleğe alma ulaşmaya çalışır bile kendinizi internete bağlı olmadan WWAN (ReachableViaWWAN) veya WiFi (ReachableViaWiFi) üzerinden bağlanmış olan bulabilirsiniz akılda Apple'ın Ulaşılabilirlik ayı kullanırken konu). benim durumumda iyi çözümü en azından - Kendi sunucusunu çağırmak ve bir rakamı geri alma sona erdi.

Cevap 18/05/2011 saat 11:40
kaynak kullanıcı

oy
2

Mevcut bağlantı kodu nasıl görünür var? Eğer kullanıyorsanız NSURLConnection +sendSynchronousRequest:returningResponse:error:, o zaman sadece bir NSError değişkenin adresini geçmek ve bundan sonra kontrol gerekir; ile connectionWithRequest:delegate:, uygulamak gerekir -connection:didFailWithError:temsilci.

Cevap 25/01/2009 saat 16:59
kaynak kullanıcı

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