質問編集履歴

1 追記

JunZenpou

JunZenpou score 20

2017/09/20 16:52  投稿

swiftでのデータ引き継ぎの画面遷移
###前提・実現したいこと
postでjsonデータを次の画面に引き継ぎたいのですが、上手くいきません。
 
LoginControllerのresultDataに、postで受けっとたJSONデータを格納して、  
Userontrollerのparamsにデータを渡して、UserControllerの方にpostで受けっとたJSONデータを表示させたいのですが、  
以下のようにコードを作成したのですが、上手くいきません。  
```LoginViewController.swift
// LoginViewController.swift
import UIKit
class LoginViewController: UIViewController, UITextFieldDelegate {
   
   
   @IBOutlet weak var email: UITextField!
   @IBOutlet weak var password: UITextField!
   @IBOutlet weak var password_confirmation: UITextField!
   
   var resultData:String = ""
   override func viewDidLoad() {
       super.viewDidLoad()
       email.delegate = self
       password.delegate = self
       password_confirmation.delegate = self
   }
   
   func textFieldShouldReturn(_ textField: UITextField) -> Bool{
       
       if (textField == email) {
           
               password?.becomeFirstResponder()
           
           } else if (textField == password) {
               
               password_confirmation?.becomeFirstResponder()
           }else{
               // キーボードを閉じる
               textField.resignFirstResponder()
       }
       return true
   }
   
   
   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){
       if(email.isFirstResponder || password.isFirstResponder || password_confirmation.isFirstResponder){
           email.resignFirstResponder()
           password.resignFirstResponder()
           password_confirmation.resignFirstResponder()
       }
   }
   
   
   @IBAction func backButton(_ sender: Any) {
       dismiss(animated: true, completion: nil)
   }
   
   
   @IBAction func LoginButton(_ sender: Any) {
       
       
       let emailText:String = self.email.text!
       let passwordText:String = self.password.text!
       let password_confirmationText:String = self.password_confirmation.text!
       
       let urlString = "" 
       let request = NSMutableURLRequest(url: NSURL(string: urlString)! as URL)
       
       request.httpMethod = "POST"
       request.addValue("application/json", forHTTPHeaderField: "Content-Type")
       
       
       let params: [String: AnyObject] = [
           "email": emailText as AnyObject,
           "password": passwordText as AnyObject,
           "password_confirmation": password_confirmationText as AnyObject
       ]
       
       do{
           request.httpBody = try JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)
           
           let task:URLSessionDataTask = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {(data,response,error) -> Void in
               self.resultData = String(data: data!, encoding: .utf8)!
               print("result:\(self.resultData)")
               print("response:\(String(describing: response))")
               
           })
           
           task.resume()
           
       }catch{
           
           print("Error:\(error)")
           return
           
       }
   }
   
   
    // MARK: - Navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
       if (segue.identifier == "touserinfo") {
           let UserViewController = segue.destination as! UserViewController
           UserViewController.params = self.resultData
       }
    }
   
   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
   }
   
   
   
   
}
```
```UserViewController.swift
//
// UserViewController.swift
import UIKit
class UserViewController: UIViewController {
   
   @IBOutlet weak var label: UILabel!
   
   var params: String = ""
   
   override func viewDidLoad() {
       super.viewDidLoad()
       label.text = params
       print("JSON_User_info: \(params)")
   }
   
   @IBAction func backButton(_ sender: Any) {
       dismiss(animated: true, completion: nil)
   }
   
   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
   }
   
}
```
ご教授お願いいたします。
  • iOS

    6250 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Swift

    12276 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る