2016-08-09 6 views
1

Aufgrund einiger Probleme versuche ich Alamofire zu verwenden, hier habe ich eine Alamofire, die eine Online-JSON-Datei erhält, die vier Ergebnisse erhält, sie in der Picker-Ansicht platziert und aktualisiert, sodass sie angezeigt werden können oben. Der Code funktioniert hier perfekt:Picker-Ansicht wird nicht aktualisiert

Alamofire.request(.GET, "https://example.com/json.json", parameters: ["foo": "bar"]) 
      .responseJSON { response in 
       print(response.request) // original URL request 
       print(response.response) // URL response 
       print(response.data)  // server data 
       print(response.result) // result of response serialization 

       if let JSON = response.result.value { 
        self.mypickerview.delegate = self 
        self.mypickerview.dataSource = self 
        self.pickerData = [JSON["One"] as! String, JSON["Two"] as! String, JSON["Three"] as! String, JSON["Four"] as! String] 

        self.mypickerview.delegate = self; 

       } 




     } 

aber das Problem ist, dass mit diesem Code, während es die Daten erfolgreich zu bekommen verwaltet, ist es nicht in der Picker Ansicht, die zeigt:

// Setup the session to make REST GET call. Notice the URL is https NOT http!! 
let postEndpoint: String = "https://example.com/json.json" 
let session = NSURLSession.sharedSession() 
let url = NSURL(string: postEndpoint)! 

// Make the POST call and handle it in a completion handler 
session.dataTaskWithURL(url, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 
    // Make sure we get an OK response 
    guard let realResponse = response as? NSHTTPURLResponse where 
     realResponse.statusCode == 200 else { 
      print("Not a 200 response") 
      return 
    } 

    // Read the JSON 
    do { 
     if let ipString = NSString(data:data!, encoding: NSUTF8StringEncoding) { 
      // Print what we got from the call 
      print(ipString) 

      // Parse the JSON to get the data 
      let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 
      let One = jsonDictionary["One"] as! String 
      let Two = jsonDictionary["Two"] as! String 
      let Three = jsonDictionary["One"] as! String 
      let Four = jsonDictionary["One"] as! String 


      self.mypickerview.delegate = self 
      self.mypickerview.dataSource = self 
      self.pickerData = [One, Two, Three, Four] 
      self.mypickerview.delegate = self; 



     } 
    } catch { 
     print("bad things happened") 
    } 

}).resume() 

Was könnte Das Problem mit dem zweiten Code, der verhindert, dass die Optionen in der Auswahlansicht angezeigt werden?

+0

Sind Sie sicher, dass Sie sich in der Hauptwarteschlange befinden? –

Antwort

1

Gleich nach

self.pickerData = [One, Two, Three, Four] 

Aufruf nach der Zwangsweises die Daten im Hauptthread nachladen als @SaintThread im Kommentar

self.mypickerview.reloadAllComponents() 
+0

Das hat funktioniert! Vielen Dank! – Matt

1

erwähnt Wenn Sie benötigen picker sich ändern - diese Methode aufrufen!

self.mypickerview.reloadAllComponents()