2016-10-21 5 views
3

接続に10秒以上経ってもログインできない場合は、「ネットワークエラー」メッセージを表示します。10秒後のタイムアウト機能Swift/iOS

10秒後にログイン機能を停止してこのエラーメッセージを表示するにはどうすればよいですか?

私はAlamoFireを使用しています。

私は完全な実装を持っていないが、これは、私はのように動作する私の機能何をしたいのスケルトンです:あなたは、以下のAlamofireを使用している場合

func loginFunc() { 

    /*Start 10 second timer, if in 10 seconds 
    loginFunc() is still running, break and show NetworkError*/ 


    <authentication code here> 
} 
+1

を管理する方法です。 – rmaddy

+0

関数スケルトンで更新されました。 –

+0

タイムアウトで更新する必要がある実際の作業コードで質問を更新してください。 – rmaddy

答えて

1

がタイムアウト

を定義するためのコードです​​

また、タイマが10秒後に正確に起動するため、APIが応答するかどうかにかかわらず、タイムアウトで管理するだけで、タイマーで管理する必要はありません。ここ

とは、あなたの質問は、あなたがタイムアウトしたいあなたの関連するコードを更新し、タイムアウト

self.alamofireManager!.request(.POST, "myURL", parameters:params) 
.responseJSON { response in 
    switch response.result { 
     case .Success(let JSON): 
      //do json stuff 
     case .Failure(let error): 
      if error._code == NSURLErrorTimedOut { 
       //call your function here for timeout 
      } 
    } 
} 
+0

Thanks Rajat。タイムアウトが発生したときに関数を呼び出すにはどうすればよいですか? AlamoFireがタイムアウトしたときに 'myFunc()'を呼びたいとします。 –

+1

タイムアウトを処理するために私の答えを編集しました。 – Rajat

+0

「Alamofire」だけを使用すると、私の要求はうまくいきます。 'Alamorefire.Manager'を使用すると、' NSErrorFailingURLStringKey'と表示されます。 –

1
func delay(delay:Double, closure:()->()) { 
    dispatch_after(
     dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), closure) 
} 

func loginFunc() { 

    delay(10.0){ 
     //time is up, show network error 
     //return should break out of the function (not tested) 
     return 
    } 

    //authentication code 
+0

Swift 3:http://stackoverflow.com/a/37801602/995049 – Alexey

関連する問題