2016-12-15 4 views
0

В настоящее время я пытаюсь получить значение из предупреждения коробки в быстром 3.Получить значение из оповещения TextField

Приведенный ниже код используется для запроса предупреждения и сохранить данные, однако, им удается с вызовом вернуть данные и манипулировать им, так что это всего лишь базовая строка.

func presentAlert() { 
     let alertController = UIAlertController(title: "IP?", message: "Please input your unique key:", preferredStyle: .alert) 

     let confirmAction = UIAlertAction(title: "Confirm", style: .default) { (_) in 
      if let field = alertController.textFields?[0] { 
       // store it 
       UserDefaults.standard.set(field.text, forKey: "userIP") 
       UserDefaults.standard.synchronize() 
      } else { 
       // user did not fill field 
       print("no input given") 
      } 
     } 

     let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in } 

     alertController.addTextField { (textField) in 
      textField.placeholder = "IP" 
     } 

     alertController.addAction(confirmAction) 
     alertController.addAction(cancelAction) 

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

Этот метод называется здесь:

override func viewDidAppear(_ animated: Bool) { 
     presentAlert() 
    } 

Я пытаюсь вызвать его и назначить его между строкой как:

let url_to_unlock:String = "http://\(UserDefaults.standard.value(forKey: "userIP")):3000/unLock" 

Однако, это дает мне выход :

http://Optional():3000/unLock 

Когда я пытаюсь привить это.

Любой толчок в правильном направлении был бы весьма полезен. Класс Добавлено:

class ViewController: UIViewController { 

    func presentAlert() { 
     let alertController = UIAlertController(title: "IP?", message: "Please input your unique key:", preferredStyle: .alert) 

     let confirmAction = UIAlertAction(title: "Confirm", style: .default) { (_) in 
      if let field = alertController.textFields?[0] { 
       // store your data 
       //this could be lock unique key name etc in future 
       UserDefaults.standard.set(field.text, forKey: "userIP") 
       UserDefaults.standard.synchronize() 
      } else { 
       // user did not fill field 
       print("no input given") 
      } 
     } 

     let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in } 

     alertController.addTextField { (textField) in 
      textField.placeholder = "IP" 
     } 

     alertController.addAction(confirmAction) 
     alertController.addAction(cancelAction) 

     self.present(alertController, animated: true, completion: nil) 
    } 
    //view did appear for the alert 
    override func viewDidAppear(_ animated: Bool) { 
     presentAlert() 
    } 

    //to post to an /unLock it must be put in the URL 


    // let url_to_unlock:String = "http://\(UserDefaults.standard.value(forKey: "userIP")):3000/unLock" 
    //let url_to_lock:String = "http://\(textField):3000/Lock" 

    let url_to_unlock:String = "http://10.73.195.218:3000/unLock" 
    let url_to_lock:String = "http://10.73.195.218:3000/Lock" 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 
    var Timestamp: String { 
     return "\(NSDate().timeIntervalSince1970 * 1000)" 
    } 
    func un_lock() 
    { 
      print(url_to_unlock) 
     let url:URL = URL(string: url_to_unlock)! 
     let session = URLSession.shared 

     let request = NSMutableURLRequest(url: url) 
     request.httpMethod = "POST" 
     request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData 

     let paramString = "data=unLocking at \(Timestamp)" 
     request.httpBody = paramString.data(using: String.Encoding.utf8) 

     let task = session.dataTask(with: request as URLRequest, completionHandler: { 
      (
      data, response, error) in 

      guard let _:Data = data, let _:URLResponse = response , error == nil else { 
       print("error") 
       return 
      } 
      //for errors 
      let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
      print(dataString!) 

     }) 

     task.resume() 
    } 

    func lock() 
    { 
     let url:URL = URL(string: url_to_lock)! 
     let session = URLSession.shared 

     let request = NSMutableURLRequest(url: url) 
     request.httpMethod = "POST" 
     request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData 

     let paramString = "data=Locking at \(Timestamp)" 
     request.httpBody = paramString.data(using: String.Encoding.utf8) 

     let task = session.dataTask(with: request as URLRequest, completionHandler: { 
      (
      data, response, error) in 

      guard let _:Data = data, let _:URLResponse = response , error == nil else { 
       print("error") 
       return 
      } 
      //for errors 
      let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
      print(dataString!) 

     }) 

     task.resume() 

    } 

    @IBAction func lock(_ sender: UIButton) { 
     lock() 
    } 

    @IBAction func unLock(_ sender: Any) { 
     un_lock() 

    } 
    } 

Спасибо.

+0

Когда вы назначая url_to_unlock? –

+0

@JohnD После функции, в основном классе ViewController, но перед ViewDidLoad .. Куда она должна идти? – CS456

+0

Вы вызываете функцию для изменения url_to_unlock после нажатия подтверждения? –

ответ

0

Значение для этого не является обязательным:

// let url_to_unlock:String = "http://\(UserDefaults.standard.value(forKey: "userIP")):3000/unLock" 

попробовать:

let url = UserDefaults.standard.value(forKey: "userIP")! 

let url_to_unlock:String = "http://\(url):3000/unLock" 
+0

Это сработало, спасибо за вашу помощь! – CS456