2016-11-13 11 views
2

if else文を使用してインターネットに接続しているかどうかを検出するアプリを作成しています。インターネットがある場合は何もしませんが、インターネットに接続していない場合はアプリはReachabilityを見つけて管理したインターネットが必要だと言っていますが、私のviewDidLoad()に実装するには、uialertviewが動作していないようです。 私はこの使用しています:私のビューコントローラクラスで、その後インターネット接続の検出と表示UIAlertview Swift 3

public class Reachability { 
class func isConnectedToNetwork() -> Bool { 
    var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) 
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 

    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { 
     $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in 
      SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) 
     } 
    } 
    var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0) 
    if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false { 
     return false 
    } 
    let isReachable = flags == .reachable 
    let needsConnection = flags == .connectionRequired 
    return isReachable && !needsConnection 
    } 
} 

を:

override func viewDidLoad() { 
     if Reachability.isConnectedToNetwork() == true 
     { 
      print("Connected") 
     } 
     else 
     { 
      let controller = UIAlertController(title: "No Internet Detected", message: "This app requires an Internet connection", preferredStyle: .alert) 
      let ok = UIAlertAction(title: "OK", style: .default, handler: nil) 
      let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 

      controller.addAction(ok) 
      controller.addAction(cancel) 

      present(controller, animated: true, completion: nil) 
     } 
     super.viewDidLoad() 
     //... 
    } 

とalertviewが どんな提案をポップアップしないように見えますか?助けてくれる? ありがとう

+0

は 'viewDidAppear'の代わりに、' viewDidLoad'を使用してみてください。 – rmaddy

+0

@rmaddy少し詳しく説明できますか?私の新しいコードをviewdidload()atm – killburn

+0

に読み込むことは何も言いません。到達可能性関連のコードを 'viewDidLoad'メソッドから移動して' viewDidAppear'メソッドに入れるだけです。 – rmaddy

答えて

4

ViewControllerライフサイクルのviewDidAppearメソッドにAlertControllerを配置する必要があります。これは、viewDidLoadとviewWillAppearのメソッドで現在のビューがまだウィンドウの階層にないためです。
あなたがAlertControllerのような更なるViewControllersを提示したい場合は、あなたの新しいのViewControllerをレンダリングすることができたでフルロードされたビューが必要です。 のUIViewControllerメソッドが呼び出されます:これは、AppleのドキュメントがのViewControllerについて言っているものです

override func viewDidLoad() { 
    super.viewDidLoad() 
    //ViewControllers view not in the window hierarchy 
    // Here you could make further initialization of your views subviews 
} 

override func viewWillAppear(_ animated: Bool) { 
    //ViewControllers view ist still not in the window hierarchy 
    //This is the right place to do for instance animations on your views subviews 
} 

override func viewDidAppear(_ animated: Bool) { 
    // ViewControllers view ist fully loaded and could present further ViewController 
    //Here you could do any other UI operations 
    if Reachability.isConnectedToNetwork() == true 
    { 
     print("Connected") 
    } 
    else 
    { 
     let controller = UIAlertController(title: "No Internet Detected", message: "This app requires an Internet connection", preferredStyle: .alert) 
     let ok = UIAlertAction(title: "OK", style: .default, handler: nil) 
     let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 

     controller.addAction(ok) 
     controller.addAction(cancel) 

     present(controller, animated: true, completion: nil) 
    } 

} 

を次のように:

  • のviewDidLoadを(は) - ビューコントローラのコンテンツビュー(そのビュー階層の最上位 )を作成し、絵コンテからロードされたときに呼び出されます。この メソッドは、初期設定用です。ただし、アプリ内のリソースが限られているためビューが になっている可能性があるため、 が1回だけ呼び出されるという保証はありません。
  • viewWillAppear() - 表示が になる前に常に実行する操作である を対象としています。 他のビューでは、表示の可視性が切り替えられることがあるため、このメソッドは、常に コンテンツビューが画面に表示される直前に呼び出されます。
  • viewDidAppear() - の操作を目的とし、データの取得やアニメーションの表示など、ビューが になるとすぐに表示します。 ビューの可視性が他のビューによってトグルされたり隠れたりする可能性があるため、この メソッドは、コンテンツビューが表示された直後に常に呼び出されます。 オンスクリーン。

参考:https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson4.html

+0

ありがとう!出来た – killburn

関連する問題