2017-10-13 4 views
2

Quelqu'un peut-il aider à résoudre cet avertissement dans Swift3 lors de l'utilisation de Google Adresses? "Avertissement de l'API Places: Un délégué n'a pas été défini sur une instance de GMSAutocompleteResultsViewController avant son utilisation Notez que cela peut entraîner un comportement indéfini, comme l'impossibilité de fermer les écrans, de ne pas être averti des sélections et d'être incapable de gérer le cycle de vie des objets. "API Google Places d'avertissement

Je essentiellement suivi le tutoriel en https://developers.google.com/places/ios-api/autocomplete [Ajouter une barre de recherche en haut de vue]

code:

import UIKit[enter image description here][1] 
import GooglePlaces 

class LocationTabViewController: UIViewController {   
     var resultsViewController: GMSAutocompleteResultsViewController? 
     var searchController: UISearchController? 
     var resultView: UITextView? 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      resultsViewController = GMSAutocompleteResultsViewController() 

      resultsViewController?.delegate = self as? GMSAutocompleteResultsViewControllerDelegate 

      searchController = UISearchController(searchResultsController: resultsViewController) 

      searchController?.searchResultsUpdater = resultsViewController 

      let subView = UIView(frame: CGRect(x: 0, y: 65.0, width: 350.0, height: 45.0)) 

      subView.addSubview((searchController?.searchBar)!) 

      view.addSubview(subView) 

      searchController?.searchBar.sizeToFit() 

      searchController?.hidesNavigationBarDuringPresentation = false 

      // When UISearchController presents the results view, present it in 

      // this view controller, not one further up the chain. 

      definesPresentationContext = true 

     } 

    } 



    // Handle the user's selection. 

    extension ViewController: GMSAutocompleteResultsViewControllerDelegate { 

    func resultsController(_ resultsController: GMSAutocompleteResultsViewController, 

           didAutocompleteWith place: GMSPlace) { 

      // Do something with the selected place. 

      print("Place name: \(place.name)") 

      print("Place address: \(String(describing: place.formattedAddress))") 

      print("Place attributions: \(String(describing: place.attributions))") 

     } 



     func resultsController(_ resultsController: GMSAutocompleteResultsViewController, 

           didFailAutocompleteWithError error: Error){ 

      // TODO: handle the error. 

      print("Error: ", error.localizedDescription) 

     } 



     // Turn the network activity indicator on and off again. 

     func didRequestAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) { 

      UIApplication.shared.isNetworkActivityIndicatorVisible = true 

     } 



     func didUpdateAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) { 

      UIApplication.shared.isNetworkActivityIndicatorVisible = false 

     } 

} 

Répondre

1

Vous avez juste besoin de régler le délégué au contrôleur, comme ceci:

resultsViewController = GMSAutocompleteResultsViewController() 
resultsViewController?.delegate = self 

Cela devrait se débarrasser de l'avertissement.

Bonne chance!

+0

Une erreur est survenue en disant: Impossible d'attribuer une valeur de type '' LocationTabViewController "pour taper" GMSAutocompleteResultsViewControllerDelegate? "Et le mot-clic" Insert as! GMSAutocompleteResultsViewControllerDelegate ". – Rocky

+0

@Rocky Je crois que vous devez utiliser l'opérateur bang dans ce cas' resultsViewController? .delegate = self comme! GMSAutocompleteResultsViewControllerDelegate' pour ne pas retourner un optionnel. www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0ahUKEwiSt97bzvTWAhVLwFQKHS_aDRIQFgg6MAM&url=https%3A%2F%2Fdeveloper.apple.com%2Flibrary%2Fcontent%2Fdocumentation%2FSwift%2FConceptual% 2FSwift_Programming_Language% 2FTypeCasting.html & usg = AOvVaw2PrYfF_q4lKcQlBeymrY1K) –