2016-05-20 13 views
0

完全な辞書が必要な場合は、リクエストがあります。しかし、ブレークポイントで私の要求をチェックしたとき、私はそれが私の要求を飛び越えるのを見ました...それは何が間違っていますか?NSURL要求が機能していません

func downloadPackages() { 
    let url = "\(URL_BASE)package/list?id=666" 
    let dataURL = NSURL(string: url) 
    let dataRequest = NSURLRequest(URL: dataURL!) 
    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() 
} 

印刷されませんが(「QQ2」)、印刷されます(「QQ」)。

+3

これは非同期要求です。あなたはそれが完了するのを待っていましたか? – jtbandes

答えて

0

あなたはHTTPリクエストのメソッドと値を追加しなかったと思います。私はあなたが文法ミスをしたと思います

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

: - - :だから、このようにしてみてください

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

とのUITableViewを移入するためにはい秒間待ちます。

より良い方法だろう次のとおりです。 -

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() 
       }) 
}) 

残りは大丈夫のようです。

+0

もう1つのことは、ブラウザで必要なパラメータを使用してURLを開き、その応答が期待されるかどうかを確認することです。それはQQ2を印刷する必要があるためです – MShah

関連する問題