我正在尝试创建HTTP请求并返回一些JSON数据。它正确地连接到API并返回数据但是当我运行应用程序时它返回我打印的行("错误")而不继续通过应用程序。如果我删除println并继续通过断点,应用程序将永远运行,因为我无法继续通过断点。
我确信我对闭包应该如何工作有一些基本的误解。我在这里缺少什么?
func logIn() {
var url = "https://www.photoshelter.com/psapi/v3/mem/authenticate?api_key=(api_key)&email=(email)&password=(password)&mode=token"
var baseURL:NSURL? = NSURL(string: url)
var request: NSMutableURLRequest? = NSMutableURLRequest(URL: baseURL!)
var session = NSURLSession.sharedSession()
var task = session.dataTaskWithRequest(request!, completionHandler: { (data, response, error) -> Void in
println("Error")
var responseObject = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil)
})
task.resume()
}
@IBAction func signInButton(sender: AnyObject) {
logIn()
}
答案 0 :(得分:2)
这种或者接近的变化是我几乎所有网络的工作方式。看起来你的实现并没有真正做任何事情。
func logIn() {
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
let url = NSURL(string: "https://www.photoshelter.com/psapi/v3/mem/authenticate?api_key=(api_key)&email=(email)&password=(password)&mode=token")
let session = NSURLSession.sharedSession()
// Request
let request = NSMutableURLRequest(URL: url!)
// You can set request properties like HTTPMethod and HTTPBody to customize things
let loginUserDataTask = session.dataTaskWithRequest(request, completionHandler: { data, response, error in
var success = false
if let error = error {
println("Failure! \(error)")
if error.code == -999 { return }
} else if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode == 200 {
if let array = parseJSON(data) {
success = true
// Do something with array
}
} else {
println("Failure! \(response)")
}
}
dispatch_async(dispatch_get_main_queue()) {
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
}
})
loginUserDataTask?.resume()
}
这里有parseJSON:
来处理数据:
func parseJSON(data: NSData) -> [AnyObject]? {
var error: NSError?
if let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &error) as? [AnyObject] {
return json
} else if let error = error {
println("JSON Error: \(error)")
} else {
println("Unknown JSON Error")
}
return nil
}