Nasıl iPhone SDK üzerinde etkin bir İnternet Bağlantısı için kontrol etmek?
Eğer iPhone üzerinde bir Internet bağlantısı Cocoa Touch kitaplıklarını kullanan var olmadığını görmek için kontrol etmek istiyorum.
Bu NSURL
kullanarak bunu yapmak için bir yol buldum. Bu şekilde yaptım galiba biraz güvenilmez (çünkü Google bile bir gün aşağı ve güvenerek bir 3. parti gibi kötü) ve ben diye kontrol etmek için görmek için bir yanıttan başka web sitelerine Google cevap vermedi, öyle görünüyor savurgan ve gereksiz bir yükü benim uygulama.
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
Ne ben kötü yapmış? Bunu yapmanın daha iyi bir yolu nedir? (Eğer bahsetmiyorum bile stringWithContentsOfURL
3.0 önerilmiyor)
CEVAP
YÖNTEM 1: yapmak (ARC ve GCD) uyumlu basit bir sınıfı Kullanın
1) proje SystemConfiguration
çerçeve Ekle ama hiçbir yerde de dahil olmak üzere merak etmeyin
2) Ekle Milyon Tony proje için Reachability.h
Reachability.m
(burada bulundu: https://github.com/tonymillion/Reachability) sürümü
3) arayüz bölümüne Güncelleştirin
#import "Reachability.h"
// Add this to the interface in the .m file of your view controller
@interface MyViewController ()
{
Reachability *internetReachableFoo;
}
@end
4) Daha Sonra bu yöntemi uygulayın .m arayabilirsiniz görünümü denetleyicisi dosyası
// Checks if we have an internet connection or not
- (void)testInternetConnection
{
internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"];
// Internet is reachable
internetReachableFoo.reachableBlock = ^(Reachability*reach)
{
// Update the UI on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Yayyy, we have the interwebs!");
});
};
// Internet is not reachable
internetReachableFoo.unreachableBlock = ^(Reachability*reach)
{
// Update the UI on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Someone broke the internet :(");
});
};
[internetReachableFoo startNotifier];
}
YÖNTEM 2: kendi kendine, eski yol Apple'ın eski Erişilebilirlik sınıfı kullanarak
1) proje SystemConfiguration
çerçeve Ekle ama hiçbir yerde de dahil olmak üzere merak etmeyin
2) proje (you can get those here) Reachability.h
Reachability.m
Apple'ın sürümü Ekleyin
3) @class Reachability;
Ekleyin .h kodu uygulama olduğu dosya
4) interface
bölümünde kontrol etmek için bir kaç örneğini Oluşturun .h dosyası:
Reachability* internetReachable;
Reachability* hostReachable;
5). bir yöntem Ekleyin ağ durum güncellemeleri için h:
-(void) checkNetworkStatus:(NSNotification *)notice;
6) #import "Reachability.h"
Ekleyin .m kontrol uygulama dosya
7).check uygulama nerede, m dosyası, ilk yöntem (init
viewWillAppear
viewDidLoad
vb.) birinde yer:
-(void) viewWillAppear:(BOOL)animated
{
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
internetReachable = [Reachability reachabilityForInternetConnection];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [Reachability reachabilityWithHostName:@"www.apple.com"];
[hostReachable startNotifier];
// now patiently wait for the notification
}
8) bildirim ayarlamak ne olursa olsun ve ne olursa olsun Çek gönderdi set veya çağrı aldığında yöntemi (benim durumumda, ben sadece bir BOOL seti) Ayarlayın
-(void) checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
self.internetActive = NO;
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI.");
self.internetActive = YES;
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN.");
self.internetActive = YES;
break;
}
}
NetworkStatus hostStatus = [hostReachable currentReachabilityStatus];
switch (hostStatus)
{
case NotReachable:
{
NSLog(@"A gateway to the host server is down.");
self.hostActive = NO;
break;
}
case ReachableViaWiFi:
{
NSLog(@"A gateway to the host server is working via WIFI.");
self.hostActive = YES;
break;
}
case ReachableViaWWAN:
{
NSLog(@"A gateway to the host server is working via WWAN.");
self.hostActive = YES;
break;
}
}
}
9) dealloc
viewWillDisappear
veya benzeri bir yöntemi, bir gözlemci olarak kendinizi kaldırın
-(void) viewWillDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
Bellek bir uyarı alırsınız bir örneği viewWillDisappear
kullanarak olabilir ve gözlemci asla bunun için de hesap etmelisin bu kadar kayıtsız olur. not:
Not:Kullandığınız etki alanı önemli değil. Sadece herhangi bir etki alanı için bir ağ geçidi için bir test.
ÖNEMLİ NOT:Reachability
sınıf projelerinde en çok kullanılan sınıflardan biri olduğunu ShareKit gibi diğer projelerle çakışmaları adlandırma olur. Eğer bu olursa, Reachability.h
çiftlerinden biri yeniden adlandırmak olacak ve Reachability.m
sorunu çözmek için başka bir şey için dosyaları.
Nasıl Android üzerinde internet erişim...
Nasıl bir hizmet Android üzerinde çalı...
Nasıl büyü php etkin olup olmadığını k...
Nasıl iPhone/iPad cihaz üzerinde/özgür...
Nasıl bir uygulama iPhone'da web sayfa...