2016-05-20 13 views
0

Ich habe eine Anfrage, danach brauche ich ein komplettes Wörterbuch. Aber als ich meine Anfrage mit Haltepunkten überprüfte, sah ich, dass es meine Anfrage übersprang ... Was ist daran falsch?NSURL Anfrage funktioniert nicht

Es wird nicht gedruckt ("QQ2"), aber es wird gedruckt ("QQ").

+3

Dies ist eine asynchrone Anfrage. Hast du darauf gewartet, dass es fertig ist? – jtbandes

Antwort

0

Ich denke, dass Sie HTTP-Request-Methoden und -Werte nicht hinzugefügt haben. So versuchen, wie folgt aus: -

func downloadPackages() { 
    let url = "\(URL_BASE)package/list?id=666" 
    let dataURL = NSURL(string: url) 
    let dataRequest: NSMutableURLRequest = NSMutableURLRequest(URL: dataURL!) 
    dataRequest.HTTPMethod = "POST" 
    dataRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    dataRequest.setValue("*/*", forHTTPHeaderField: "Accept") 
    let dataSession = NSURLSession.sharedSession() 
    print("QQ") 
    let dataTask = dataSession.dataTaskWithRequest(dataRequest) { (data, response, error) -> Void in 
     print("QQ2") 

     if error != nil { 
      print(error.debugDescription) 
     } else { 
      do { 
       let packageDict = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as? Dictionary<String, AnyObject> 
       if let results = packageDict!["data"] as? [Dictionary<String, AnyObject>] { 
        for obj in results { 
         let package = Package(packageDict: obj) 
         print(self.monsters.count) 
         self.monsters.append(package) 

        } 
       } 
       //Main UI thread 
       dispatch_async(dispatch_get_main_queue()) { 
        self.tableView.reloadData() 
       } 
      } 
      catch { 
      } 
     } 
    } 
    dataTask.resume() 
} 
0

Ich glaube, Sie einen Syntax Fehler gemacht: -

dispatch_async(dispatch_get_main_queue(), { 
        self.tableView.reloadData() 
       }) 

und ja für eine Sekunde warten UITableView gefüllt werden.

Nach besserem Weg wäre: -

dispatch_async(dispatch_get_main_queue(), { 
for obj in results { 
         let package = Package(packageDict: obj) 
         print(self.monsters.count) 
         self.monsters.append(package) 

        } 
dispatch_async(dispatch_get_main_queue(), { 
        self.tableView.reloadData() 
       }) 
}) 

Rest in Ordnung zu sein scheint.

+0

noch eine Sache öffnen Sie einfach die URL im Browser mit den erforderlichen Parametern und prüfen, ob es die erwartete Antwort gibt. weil es QQ2 drucken soll – MShah