2016-04-06 4 views
0

AppleからReachability Classを使ってインターネット接続をチェックしました。私は以下のコードに共有します。私はオンラインでアプリを開くとうまくいきます。しかし、私がオフラインでアプリケーションを開こうとするとReachability機能が起動しません。誰も私がこの問題を解決するのを助けることができますか? ここでユーザーがオフラインでアプリケーションを起動したときに到達可能性がなくなった

ありがとうございました。これは、到達可能性を必要とするコードのすべてに答えるのは難しいものですが、hereはI私が使用したビデオですAppDelegate.swift

var reachability: Reachability? 

     var window: UIWindow? 

     func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 


      NSNotificationCenter.defaultCenter().addObserver(self, selector: "checkForReachability:", name:kReachabilityChangedNotification, object: nil) 

      reachability = Reachability.reachabilityForInternetConnection(); 

      reachability?.startNotifier(); 


      return true 
     } 


func checkForReachability(notification: NSNotification) { 

     let title_alert = NSLocalizedString("Connection Problem", comment: "Connection Problem") 
     let remoteHostStatus = self.reachability!.currentReachabilityStatus() 
     if (remoteHostStatus == NotReachable) { 
      let myAlert = UIAlertController(title:title_alert, message:NSLocalizedString("Please Check Your Connection", comment: "Connection Problem"), preferredStyle: UIAlertControllerStyle.Alert) 
      let okAction = UIAlertAction(title:NSLocalizedString("Try Again",comment:"Connection Problem"), style:UIAlertActionStyle.Default) { 
       action in 
       self.checkForReachability(notification) 
      } 
      myAlert.addAction(okAction) 
      self.window?.rootViewController?.presentViewController(myAlert, animated:true, completion:nil) 
     } 
    } 
+0

あなたは、接続の可用性が変化した場合に呼び出されるコールバック関数を登録したいと思います。例については、http://stackoverflow.com/questions/33551191/swift-pass-data-to-a-closure-that-c​​aptures-contextを参照してください。 –

答えて

0

内で検索されたコードです私のアプリのReachabilityを設定してください! NSNotificationCenterを使用して、ユーザーがオンラインであるかどうかを常に確認します。ユーザーがオフラインになると、ユーザーがオンラインに戻るまでアクションが発生する可能性があります。

+0

まずはお返事ありがとうございます。しかし、私のアプリでは、ユーザーがオンラインで、アプリを起動すると、すぐに表示されたオフライン通知が表示された場合に、すべての機能が使用されます。私はここまでそれを理解した。しかし、私は彼らがオフラインにしようとすると、私は自分のアプリを開くユーザーにしたくない。それは私が解決したい問題です –

+0

私は参照してください...だから、あなたはオフラインでユーザーのアプリケーションを開けないようにしたいですか? –

+0

はい、まさに私が欲しかったのです –

1

到達可能性は、状態に変更されたときに通知を送信します。あなたがインターネットを持っておらず、これが変わらないなら、通知は一切送信されません。到達可能性オブジェクトを作成した後で、おそらくに手作業でチェックする必要があります。チェックするには、通知コールバック以外でcurrentReachabilityStatus()をチェックするだけです。

PS。インターネットがなくなったときに警告を出すことはありませんが、ユーザーが実際にインターネットを必要とする何かをしても機能しないときは警告を送信します。バックグラウンド更新のようなものはユーザーには見えてはならず、アラートを表示すべきではありません。 (悪い例はMac上のiTunesだ。iTunes Storeに接続する意思がないときにiTunes Storeに接続できないことをいつも教えてくれる)。

明らかにあなたのアプリによっては、明らかにあなたのアプリに依存します。 Take Safari - あなたはページに接続するときだけ、インターネットに接続されていないと言わない。インターネットにアクセスしなくても便利な機能がたくさんあります。

あなたのアプリがインターネットアクセスなしで全く役に立たず、何もできない場合は、「インターネットなし」と表示されたページを表示してください。ユーザーができることがあれば、それらのことをさせてください。プログラマーは、プログラマーの視点から、これらのことをよく見ています:何かが間違っていて、誰もがあなたにユーザーに知らせるべきだと言いました。ユーザーの観点から:繰り返されるアラートで話すことは、彼らの神経を襲うでしょう。 AirPlaneモードをオンにしたばかりのユーザーを想像してみてください。そのユーザーは「天国のために、私がWiFiをオフにしたので、WiFiがないことを知っています。

+0

どうすれば手でチェックできますか?あなたは私にそれを説明できますか? –

+0

あなたは何をしますか? Facebookなどのオフラインページを作成しますか?あなたは私に何を教えてくれますか? –

0

のUIViewControllerの拡張機能を作成し、このように機能を追加 -

func networkChanged() { 
    if let isReachable = Reachability()?.isReachable, isReachable == true { 
     noInternetErrorManager.removeNoInternetView() 
    } else { 
     noInternetErrorManager.displayNoInternetError(forParentView: view) 
    } 
} 

今(のviewDidLoad上で、この関数を呼び出す)

関連する問題