2017-02-13 6 views
2

を働いていない: [[[ReachabilityManager sharedManager] reachability] isReachable];戻っNOYESする必要があります:私は次の式をチェックするときhttps://github.com/tonymillion/ReachabilityiOSの - 到達可能性isReachable私はこのライブラリを使用してい

問題が時々あります。私はインターネットがあることを知っています。その間、私はレストサービスを呼び出します。

さらに、私が[Reachability reachabilityWithHostname:@"www.google.com"];を実行して、isReachableメソッドを要求すると、期待どおりに機能します。

私のテストは簡単ですが、エミュレータで試してからイーサネットケーブルを抜き差ししてください。

-(void) initializeReachability { 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; 

    //hostReachability 
    NSString *remoteHostName = @"www.apple.com"; 
    self.hostReachability = [Reachability reachabilityWithHostName:remoteHostName]; 
    [self.hostReachability startNotifier]; 
    [self updateInterfaceWithReachability:self.hostReachability]; 

    //internetReachability 
    self.internetReachability = [Reachability reachabilityForInternetConnection]; 
    [self.internetReachability startNotifier]; 
    [self updateInterfaceWithReachability:self.internetReachability]; 

    //wifiReachability 
    self.wifiReachability = [Reachability reachabilityForLocalWiFi]; 
    [self.wifiReachability startNotifier]; 
    [self updateInterfaceWithReachability:self.wifiReachability]; 

} 


- (void)updateInterfaceWithReachability:(Reachability *)reachability 
{ 
    if (reachability == self.hostReachability) 
    { 
     [self configurereachability:reachability]; 
    } 

    if (reachability == self.internetReachability) 
    { 
     [self configurereachability:reachability]; 
    } 

    if (reachability == self.wifiReachability) 
    { 
     [self configurereachability:reachability]; 
    } 
} 


- (void)configurereachability:(Reachability *)reachability 
    { 
    NetworkStatus netStatus = [reachability currentReachabilityStatus]; 
    BOOL connectionRequired = [reachability connectionRequired]; 

    switch (netStatus) 
    { 
     case NotReachable:  { 
      _isInternetAvaliable = NO; 
      break; 
     } 

     case ReachableViaWWAN:  { 
      _isInternetAvaliable = YES; 
      break; 
     } 
     case ReachableViaWiFi:  { 
      _isInternetAvaliable = YES; 
      break; 
     } 
    } 

    if (connectionRequired) 
    { 
     _isInternetAvaliable = NO; 
    } 
} 


-(BOOL) isInternetAvailable { 
    return _isInternetAvaliable; 
} 

は今、あなたは&アクセスインターネットの状態を呼び出す準備ができている

@implementation ReachabilityManager 

#pragma mark - 
#pragma mark Default Manager 
+ (ReachabilityManager *)sharedManager { 
    static ReachabilityManager *_sharedManager = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     _sharedManager = [[self alloc] init]; 
    }); 

    return _sharedManager; 
} 

#pragma mark - 
#pragma mark Memory Management 
- (void)dealloc { 
    // Stop Notifier 
    if (_reachability) { 
     [_reachability stopNotifier]; 
    } 
} 

#pragma mark - 
#pragma mark Class Methods 
+ (BOOL)isReachable { 
    return [[[ReachabilityManager sharedManager] reachability] isReachable]; 
} 

+ (BOOL)isUnreachable { 
    return ![[[ReachabilityManager sharedManager] reachability] isReachable]; 
} 

+ (BOOL)isReachableViaWWAN { 
    return [[[ReachabilityManager sharedManager] reachability] isReachableViaWWAN]; 
} 

+ (BOOL)isReachableViaWiFi { 
    return [[[ReachabilityManager sharedManager] reachability] isReachableViaWiFi]; 
} 

#pragma mark - 
#pragma mark Private Initialization 
- (id)init { 
    self = [super init]; 

    if (self) { 
     // Initialize Reachability 
     self.reachability = [Reachability reachabilityWithHostname:@"www.google.com"]; 

     // Start Monitoring 
     [self.reachability startNotifier]; 
    } 

    return self; 
} 

@end 
+1

appleの到達可能性クラスで試してみると、ソースコードをダウンロードできます。https://developer.apple.com/library/content/samplecode/Reachability/Introduction/Intro.html –

+0

フレンドホストの到達可能性を確認するだけですか? –

+0

インターネット接続をテストしたい。 – Ricardo

答えて

0
@property (nonatomic) Reachability *hostReachability; 
@property (nonatomic) Reachability *internetReachability; 
@property (nonatomic) Reachability *wifiReachability; 

1つのブール値を宣言し、自分の到達可能性のInit

BOOL _isInternetAvaliable; 

if([[ReachabilityManager sharedManager] isInternetAvailable]){ 
    //Internet on 
} 
+0

[[ReachabilityManager sharedManager] isInternetAvailable]は常にこのコードでYESを返します。 – Ricardo

+0

自分のプロジェクトで自分のコードが再び動作していることを確認しました.WifiまたはWANネットワークに接続していないことを確認してください。 –

+0

インターネットに接続されていない場合、 'configurereachability:'メソッドをデバッグしてください 'netStatus'は' NotReachable'を返すべきです&NOを返す必要があります –

0

最後に、私は信頼できる解決策を見つけました。 stackoverflow.com/a/14870229/2139691

関連する問題