我有一个请求,之后我需要一个完整的词典。但是当我用断点检查我的请求时,我看到它超出了我的要求......它有什么问题?
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”)。
答案 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()
})
})
休息似乎很好。