2016-07-28 6 views
-3

ОК, я новичок в этом и медленно работаю по курсу разработки. Но я понимаю, могу ли я сломать это, я буду длинным путем вперед.Передайте переменное значение из IBAction в IBOutlet

Я делаю почтовый вызов файла PHP на моем сервере и возвращаю данные JSON. Это работает. и я могу напечатать переменную

print("firstNameValue: \(firstNameValue)") 

теперь я хочу, чтобы вывести значение одной переменной ... firstNameValue в текстовое поле под названием TextField.

Я новичок в Swift и думаю «глобальная переменная?». Это сработало, но я хочу дождаться ответа от HTTP-вызова, чтобы завершить, а затем обновить текстовое поле.

Надеюсь, вы сможете помочь. Я очень новичок в ООП, и моя голова разрывается.

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var feel: UITextField! 

    @IBAction func anxious(sender: AnyObject) { 



     let myUrl = NSURL(string: "http://mywebsite.com/Jamesbond.php"); 

     let request = NSMutableURLRequest(URL:myUrl!); 

     request.HTTPMethod = "POST";// Compose a query string 

     let postString = "firstName=James&lastName=Bond"; 

     request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding); 

     let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
      data, response, error in 

      if error != nil 
      { 
       print("error=\(error)") 
       return 
      } 

      // You can print out response object 
      print("response = \(response)") 

      // Print out response body 
      let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("responseString = \(responseString)") 

      //Let's convert response sent from a server side script to a NSDictionary object: 
      do { 
       let myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 

       if let parseJSON = myJSON { 

        // Now we can access value of First Name by its key 
        let firstNameValue = parseJSON["firstName"] as? String 

        print("firstNameValue: \(firstNameValue)") 

        EDIT::the below two lines solved it. 
        dispatch_async(dispatch_get_main_queue()) { 
        self.textField.text = firstNameValue} 


       } 
      } catch { 
       print(error) 
      } 
     } 
     task.resume() 

    } 
    @IBOutlet weak var textField: UITextField! 




    @IBAction func submit(sender: AnyObject) { 
     print("hello") 
     let a = 9 
     let b = 10 
     let c = (a*b) 
     textField.text="You are a banana \(c)" 

    } 




    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
+2

Просто замените * Я ХОЧУ НАДАТЬ ЭТУ ЗНАЧЕНИЕ ... * прокомментируйте код, чтобы обновить текстовое поле, и все готово. – vadian

+0

Спасибо, что не работает, это первое, что я пробовал. textField.text = "name = \ (firstNameValue!)" это возвращается с ошибкой – uberphoebe

+0

В нем говорится, что я не хочу садиться. впереди, как self.textField.text, но когда я это делаю, он не генерирует ошибку компиляции, но значение не вводится в поле. – uberphoebe

ответ

0

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

Этот код выполняет все необходимые необязательные проверки привязки и запускает строку для обновления текстового поля в основном потоке.

...  
do { 
    if let myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject], 
     firstNameValue = parseJSON["firstName"] as? String { 
     print("firstNameValue: \(firstNameValue)") 

     dispatch_async(dispatch_get_main_queue()) { 
      self.textField.text = firstNameValue 
     } 
    } 
} 
catch { 
    print(error) 
} 

Опция .MutableContainers не требуется вообще в этом случае.

+0

Спасибо, я понял, что ... в конечном итоге приведенный ниже код решил его решить, но из того, что вы говорите, здесь есть лишний код. – uberphoebe

+0

Почти там ... см. Править на главном quiestion для решения. Спасибо за помощь – uberphoebe

Смежные вопросы