NSURL请求无效

时间:2016-05-20 05:22:49

标签: ios swift dictionary nsurlrequest tvos

我有一个请求,之后我需要一个完整的词典。但是当我用断点检查我的请求时,我看到它超出了我的要求......它有什么问题?

  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”)。

2 个答案:

答案 0 :(得分:0)

我认为您没有添加HTTP Request方法和值。所以试试这样: -

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

答案 1 :(得分: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()
               })
})

休息似乎很好。