2016-11-10 11 views
2

簡単な質問:Alamofireライブラリを使用してデータベースにユーザーを登録しています。バックエンド開発者からエンドポイントとパラメータを取得し、自分でPostmanでテストしました。データは正常に処理されています。 Register View Controllerで実装していますが、応答がありませんでした。ここに私の実装があります。参考:View Controllerからユーザータイプを離しました。エンドユーザーはユーザータイプ3であることを知らないはずです。私はここで何か間違っているかもしれません。私は出力に何の応答も戻っていないよ。Alamofire http post - ユーザーSwiftを登録する3

{ 
    "username": "userregister", 
    "register_status": "RegistrationComplete", 
    "register_date": "11/10/2016" 
} 

しかし、ユーザーが存在する場合、私は戻って、このメッセージになるだろう:ユーザーが正しく登録されたら

let params = ["username":usernameField.text!, 
        "firstname":firstNameField.text!, 
        "lastname":lastNameField.text!, 
        "password":passwordField.text!, 
        "usertype":"3", 
        "email":emailAddressField.text! 
    ] 

    let apiMethod = "http://api.example.com" 

    Alamofire.request(apiMethod, method: .post, parameters: params, encoding: URLEncoding.default).responseString { (response) in 

     print(response); 

     let alertController = UIAlertController(title: "REGISTRATION SUCCESSFUL!", message: nil, preferredStyle: .alert); 

     alertController.addAction(UIAlertAction(title: "OK", style: .default,handler: nil)); 

     self.present(alertController, animated: true, completion: nil) 

    } 



} 

     if let json = response.result.value as? Dictionary<String, String> { 
      print ("JSON: \(json)") 
      if (json["register_status"]! == "userExist") { 
       return 
     } else { 
       self.performSegue(withIdentifier: "registerSuccess", sender: self) 
      } 
      } 

は、私の応答がなければなりません

{ 
    "username": "userregister", 
    "register_status": "userExist", 
    "register_date": "11/10/2016" 
} 

私が間違っているのは何を私のSwift 3コードで?

編集は、明確にするために(登録ビューコントローラの追加): Register View Controller for the above swift code

+0

あなたは現在どのようなエラーになっていますか? –

+1

* View Controllerからユーザータイプを離しました。エンドユーザーはユーザータイプ3であることを知らないと思われます。*あなたは何を意味するのですか?言い換えれば – Honey

+0

@Honey私は分かりやすくするためにビューコントローラを表示するために自分の投稿を編集しました。エンドユーザーは顧客としてサインアップしています(UserType 3)。これはあなたに良い理解を与えることを願っています。 –

答えて

0

あなたはDispatchQueue.main.asyncブロックにアラートコントローラのプレゼンテーションの呼び出しをラップする必要があるので、あなたのコールバックは、別のスレッドで行われるすべてのUI必要があるので、メインスレッド上で発生するか、奇妙な描画/タイミングエラーが発生する可能性があります。

とにかくあなたの要求に問題はない可能性があります。あなたはiOS 9の時点でデフォルトで無効になっているhttp要求をしています。あなたのinfo.plistファイルに明示的にアプリケーション転送セキュリティキーを設定する必要があります。値はApple documentationで確認できます。私はおそらくNSAllowsArbitraryLoadsとNSExceptionAllowsInsecureHTTPLoadsの両方が必要であると推測しています。

+0

ちょっとジョシュ、私はすでにそれをしました。私は、アプリケーション内の他のフォームをAlamofireライブラリを通じてリクエストしています。この問題の原因がわからない –

+1

実際にリクエストが実際に行われていると確信していますか? alamofireリクエストの前に休憩を入れてください。時間切れになって失敗しても、データの代わりにエラーを返す必要があります。デフォルトのタイムアウトは60秒ですので、待ちます。 –

1

あなたの応答がJSONの場合は、このようになります。これは、コードのデバッグに役立ちます。また、私はブレークポイントを入れ、コンソールで応答を確認することをお勧めします。

Alamofire.request(apiMethod, method: .post, parameters: params, encoding: URLEncoding.default).responseJSON {response in 
    var err:Error? 
    switch response.result { 
    case .success(let json): 
     print(json) 
      // update UI on main thread 
     DispatchQueue.main.async { 
       let alertController = UIAlertController(title: "REGISTRATION SUCCESSFUL!", message: nil, preferredStyle: .alert); 

       alertController.addAction(UIAlertAction(title: "OK", style: .default,handler: nil)); 

       self.present(alertController, animated: true, completion: nil) 
     } 
    case .failure(let error): 
     err = error 
     print(err) 
    } 
} 

これで問題が解決しない場合は、さらにお手伝いできるように残りのクライアントのリクエストペイロードを共有してください。

+0

こんにちは私のURLはhttps://api.example.comです。{ レスポンス= { コード= 301; msg = "間違ったURL"; 成功= f; "success_ios" = 0; }; }どうすればいいですか? –

+0

301は見つかりませんでした。あなたは正しいURLを持っていることを確認してください。より多くのコードを共有できますか? –

0

@ hacker_1989 @Josh @Aaron昨日のおかげで、ありがとうございました。スウィフト3言語でAlamofireライブラリを使用してユーザの登録に私のソリューションは以下の通りです:

@IBAction func registerTappedButton(_ sender: Any) { 
    if(userNameField.text == nil || (userNameField.text?.isEmpty)!) { 
     self.showAlertError("Username required", message: "") 
     return 
    } 
    if(firsNameField.text == nil || (firsNameField.text?.isEmpty)!) { 
     self.showAlertError("First Name required", message: "") 
     return 

    } 
    if(lastNameField.text == nil || (lastNameField.text?.isEmpty)!) { 
     self.showAlertError("Last Name required", message: "") 
     return 
    } 
    if(passwordField.text == nil || (passwordField.text?.isEmpty)!) { 
     self.showAlertError("Password required", message: "") 
     return 
    } 
    if(emailAddressField.text == nil || (emailAddressField.text?.isEmpty)!) { 
     self.showAlertError("Email Address required", message: "") 
    } 

    let params = ["username": userNameField.text!, 
        "firstname": firsNameField.text!, 
        "lastname": lastNameField.text!, 
        "password": passwordField.text!, 
        "usertype": 3, 
        "email": emailAddressField.text!] as [String : Any] 

    let apiMethod = "http://api.example.com" //<-Set your endpoint here 

    Alamofire.request(apiMethod, method: .post, parameters: params, encoding: JSONEncoding.default).responseString { (response) in 

     print(response); 

     let alertController = UIAlertController(title: "REGISTRATION SUCCESSFUL!", message: nil, preferredStyle: .alert); 

     alertController.addAction(UIAlertAction(title: "OK", style: .default,handler: nil)); 



     self.present(alertController, animated: true, completion: nil) 

    } 


} 

バックエンドの開発者がJSONオブジェクトを期待するエンドポイントを変更しました。彼は以前にURLエンコードされたパラメータを期待するエンドポイントを設定していました。

すべて正常に機能しています。データが正常に渡されています。