错误域=NSURLErrorDomain 代码=-999 "cancelled"
Error Domain=NSURLErrorDomain Code=-999 "cancelled"
我正在尝试通过在 url 中提供地点 ID 来获取地点详情,如下所示。
func findingPlaceDetailsFromPlaceId(id : String){
var urlString = "https://maps.googleapis.com/maps/api/place/details/json?placeid=\(id)&key=\(apiServerKey)"
urlString = urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
//println(urlString)
if placesTask.taskIdentifier > 0 && placesTask.state == .Running {
placesTask.cancel()
}
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
placesTask = session.dataTaskWithURL(NSURL(string: urlString)!) {data, response, error in
println(error)
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
if let json = NSJSONSerialization.JSONObjectWithData(data, options:nil, error:nil) as? NSDictionary {
if let results = json["result"] as? NSArray {
println(results.count)
for rawPlace:AnyObject in results {
let dict = rawPlace as! NSDictionary
if let location = dict["geometry"]?["location"] as? NSDictionary{
let lat = location["lat"] as! CLLocationDegrees
let long = location["lng"] as! CLLocationDegrees
self.coordinate = CLLocationCoordinate2DMake(lat, long)
}
}
}
}
dispatch_async(dispatch_get_main_queue()) {
}
}
self.placesTask.resume()
}
给定的 url 是有效的。如果我在 google 中输入相同的 url,我会得到有效结果,但是当我在我的应用程序中 运行 时,它显示 "Error Domain=NSURLErrorDomain Code=-999 "cancelled"。
我找到了上述错误的解决方案。
我从 searchResultControllerView 的 didSelectRow 调用 findingPlaceDetailsFromPlaceId(id : String) 方法。调用该方法后,我立即关闭了 searchResultControllerView。这导致了上述错误。现在我关闭 dispatch_async(dispatch_get_main_queue()) 中的 searchResultControllerView,如下所示。
func findingPlaceDetailsFromPlaceId(id : String){
var urlString = "https://maps.googleapis.com/maps/api/place/details/json?placeid=\(id)&key=\(apiServerKey)"
urlString = urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
if placesTask.taskIdentifier > 0 && placesTask.state == .Running {
placesTask.cancel()
}
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
placesTask = session.dataTaskWithURL(NSURL(string: urlString)!) {data, response, error in
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
if let json = NSJSONSerialization.JSONObjectWithData(data, options:nil, error:nil) as? NSDictionary {
if let results = json["result"] as? NSDictionary {
if let location = results["geometry"]?["location"] as? NSDictionary{
let lat = location["lat"] as! CLLocationDegrees
let long = location["lng"] as! CLLocationDegrees
self.coordinate = CLLocationCoordinate2DMake(lat,long)
}
}
}
//This is what I added
dispatch_async(dispatch_get_main_queue()) {
//Dismissing the ResultControllerView
self.searchController?.dismissViewControllerAnimated(true, completion: {
//Pushing the view back to main view after completion
performSegueWithIdentifier("unwindFromSelectLocation", sender: self)
})
}
}
问题已解决..希望对其他人有用!!!
我正在尝试通过在 url 中提供地点 ID 来获取地点详情,如下所示。
func findingPlaceDetailsFromPlaceId(id : String){
var urlString = "https://maps.googleapis.com/maps/api/place/details/json?placeid=\(id)&key=\(apiServerKey)"
urlString = urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
//println(urlString)
if placesTask.taskIdentifier > 0 && placesTask.state == .Running {
placesTask.cancel()
}
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
placesTask = session.dataTaskWithURL(NSURL(string: urlString)!) {data, response, error in
println(error)
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
if let json = NSJSONSerialization.JSONObjectWithData(data, options:nil, error:nil) as? NSDictionary {
if let results = json["result"] as? NSArray {
println(results.count)
for rawPlace:AnyObject in results {
let dict = rawPlace as! NSDictionary
if let location = dict["geometry"]?["location"] as? NSDictionary{
let lat = location["lat"] as! CLLocationDegrees
let long = location["lng"] as! CLLocationDegrees
self.coordinate = CLLocationCoordinate2DMake(lat, long)
}
}
}
}
dispatch_async(dispatch_get_main_queue()) {
}
}
self.placesTask.resume()
}
给定的 url 是有效的。如果我在 google 中输入相同的 url,我会得到有效结果,但是当我在我的应用程序中 运行 时,它显示 "Error Domain=NSURLErrorDomain Code=-999 "cancelled"。
我找到了上述错误的解决方案。 我从 searchResultControllerView 的 didSelectRow 调用 findingPlaceDetailsFromPlaceId(id : String) 方法。调用该方法后,我立即关闭了 searchResultControllerView。这导致了上述错误。现在我关闭 dispatch_async(dispatch_get_main_queue()) 中的 searchResultControllerView,如下所示。
func findingPlaceDetailsFromPlaceId(id : String){
var urlString = "https://maps.googleapis.com/maps/api/place/details/json?placeid=\(id)&key=\(apiServerKey)"
urlString = urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
if placesTask.taskIdentifier > 0 && placesTask.state == .Running {
placesTask.cancel()
}
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
placesTask = session.dataTaskWithURL(NSURL(string: urlString)!) {data, response, error in
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
if let json = NSJSONSerialization.JSONObjectWithData(data, options:nil, error:nil) as? NSDictionary {
if let results = json["result"] as? NSDictionary {
if let location = results["geometry"]?["location"] as? NSDictionary{
let lat = location["lat"] as! CLLocationDegrees
let long = location["lng"] as! CLLocationDegrees
self.coordinate = CLLocationCoordinate2DMake(lat,long)
}
}
}
//This is what I added
dispatch_async(dispatch_get_main_queue()) {
//Dismissing the ResultControllerView
self.searchController?.dismissViewControllerAnimated(true, completion: {
//Pushing the view back to main view after completion
performSegueWithIdentifier("unwindFromSelectLocation", sender: self)
})
}
}
问题已解决..希望对其他人有用!!!