2015-12-09 2 views
0

В моем приложении пользователя краны на маркере, и мне нужно позвонить в веб-службу, чтобы получить информацию для показа. Я использую NSURLSession.dataTaskWithRequest, а затем вызываю dispatch_async в главной очереди, чтобы показать пользователю маркер. Но я получаю ошибку, пытаясь передать аргументы в dispatch_asyncDispatch_async после dataTaskWithRequest

коды является следующим

func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! { 

    let request = NSMutableURLRequest(URL: NSURL(string: "http://78.27.190.58:3300/api/get_location_ratings")!) 
    request.HTTPMethod = "POST" 
    let postString = "org_id=\(marker.userData["orgId"] as! Int)" 
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 

     data, response, error in 

     var json = JSON(data: data!) 

     var rating = json["results"]["avg_stars"].doubleValue 

     dispatch_async(dispatch_get_main_queue()) { (mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! in 

      self.window = NSBundle.mainBundle().loadNibNamed("infoWindow", owner: self, options: nil).first! as! infoWindow 

      self.window?.name.text = marker.title 
      self.window?.adress.text = marker.snippet 
      self.window?.stars.image = UIImage(named: "\(showStars((marker.userData["Rating"] as! NSString).doubleValue))") 
      self.window?.rating.text = String((marker.userData["Rating"] as! NSString).doubleValue) 

      return window 


     } 

    } 

    task.resume() 
} 

Ошибка

enter image description here

Что я делаю неправильно?

+0

Проверьте мой новый ответ. Мой предыдущий ответ неправильный. –

ответ

0

В вашем dispatch_async вы используете замыкание с двумя параметрами (mapView и), но ничего не передавая этим параметрам.

+0

как это сделать? –

+0

@vien дал вам ответ. У вас уже есть эти переменные из функции, они вам вообще не нужны. – Tim

+0

не работает. жалуется на «неожиданное неволевое возвращаемое значение в функции void» –

0

Поскольку вы используете dataTaskWithRequest, вы не можете получить прямое возвращаемое значение. Таким образом, вы должны использовать закрытие в этом случае. Вы можете изменить код для этого:

func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!, completion:(UIView!) -> Void) { 

    let request = NSMutableURLRequest(URL: NSURL(string: "http://78.27.190.58:3300/api/get_location_ratings")!) 
    request.HTTPMethod = "POST" 
    let postString = "org_id=\(marker.userData["orgId"] as! Int)" 
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 

     data, response, error in 

     var json = JSON(data: data!) 

     var rating = json["results"]["avg_stars"].doubleValue 

     dispatch_async(dispatch_get_main_queue()) { 

      let view = UIView(frame: self.view.frame) 

      self.window = NSBundle.mainBundle().loadNibNamed("infoWindow", owner: self, options: nil).first! as! infoWindow 

      self.window?.name.text = marker.title 
      self.window?.adress.text = marker.snippet 
      self.window?.stars.image = UIImage(named: "\(showStars((marker.userData["Rating"] as! NSString).doubleValue))") 
      self.window?.rating.text = String((marker.userData["Rating"] as! NSString).doubleValue) 

      completion(window) 


     } 

    } 

    task.resume() 
} 

И использовать его:

your_instace.mapView(mapview, markerInfoWindow: GMSMakre) { (view: UIView!) -> Void in 
     //do somethinghere 
    } 
Смежные вопросы