【问题标题】:Error Domain=NSURLErrorDomain Code=-999 "cancelled"错误域=NSURLErrorDomain 代码=-999 “已取消”
【发布时间】:2015-04-16 22:31:29
【问题描述】:

我正在尝试通过在 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”。

【问题讨论】:

  • 您似乎取消了会话。如果 placesTask.taskIdentifier > 0 && placesTask.state == .Running { placesTask.cancel() } 请评论这两行
  • 这应该是真正的答案。

标签: ios swift google-places-api google-maps-sdk-ios


【解决方案1】:

我找到了解决上述错误的方法。 我正在从 searchResultControllerView 的 didSelectRow 调用 findPlaceDetailsFromPlaceId(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)
            })



        }

    }

问题已解决..希望对其他人有用!!!

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 2021-10-24
    • 2017-03-14
    • 2020-02-22
    • 2019-04-22
    • 1970-01-01
    • 2016-01-18
    • 2015-11-14
    相关资源
    最近更新 更多