0

インターネット接続が利用可能かどうかをいくつかのViewControllerクラスで確認する必要があるiOSアプリを開発しています。ネットワーク接続を確認するために、私は ( Tony Million による Reachability ライブラリ) を使用しています。

これが私が今していることです。接続チェックが必要な ViewController クラスでは、ViewDidLoad でこのコード ブロックを使用しています。

Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];
reach.reachableBlock = ^(Reachability*reach)
{
    NSLog(@"REACHABLE!"); // Load offline data from core data
};

reach.unreachableBlock = ^(Reachability*reach)
{
    NSLog(@"UNREACHABLE!"); // Fetch data from Rest Api
};

[reach startNotifier];

しかし、ネットワーク ステータスが変化し、アプリがこの ViewController にある場合、予期しない動作が発生します。API からデータを取得すると、ループのように何度も実行されることがあります。コードで何か間違ったことをしたかどうかわからないので、専門家からのコメントを期待しています。

とにかく、この問題を解決し、コードをよりクリーンで安定させるための代替ソリューションを考えています。それが良いアプローチであるかどうか、専門家から知りたいです。isNetworkConnected という AppDelegate に BOOL 変数を保持したいと考えています。次に、 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions で、上記のコードを実行し、変数 isNetworkConnected YES/NO を設定します。したがって、コードは次のようになります...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];
    reach.reachableBlock = ^(Reachability*reach)
    {
        NSLog(@"REACHABLE!"); 
         isNetworkConnected = YES ;
    };

    reach.unreachableBlock = ^(Reachability*reach)
    {
        NSLog(@"UNREACHABLE!"); 
        isNetworkConnected = NO ;
    };

    [reach startNotifier];

    // rest codes....
} 

次に、私の ViewController で、次のようにします...

if(appdelegate.isNetworkConnected == YES){
    // Fetch data from api
} else{
   // Load offline data from Core data
}

それでおしまい。私のアイデアが良いか悪いかを知りたいのですが、間違いやより良い提案があれば、高く評価されます。前もって感謝します。

4

2 に答える 2

0

AppDelegate.h ファイルで 1 つの Bool 変数を定義し、クラス全体でこの Bool をチェックします。ネット接続が Bool にあるかどうかを確認して true にします。インターネット接続に到達できない場合、bool は false です。

そして、必要な場所でそのブールをチェックします。

于 2013-10-02T11:35:13.010 に答える