2017-10-13 147 views
2

任何人都可以在使用Google Places时帮助如何解决Swift3中的这个警告吗?Google Places API Warning

“API API警告:在使用前没有在GMSAutocompleteResultsViewController实例上设置代理请注意,这可能导致未定义的行为,例如无法关闭屏幕,未被通知选择,以及无法正确管理对象生命周期“。

我基本上遵循https://developers.google.com/places/ios-api/autocomplete教程[搜索栏添加到视图顶部]

代码:

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 

     } 

} 

回答

1

你只需要委托设置到控制器,就像这样:

resultsViewController = GMSAutocompleteResultsViewController() 
resultsViewController?.delegate = self 

这应该摆脱警告。

祝你好运!

+0

有一个错误说:不能指定类型''LocationTabViewController'的值来键入“GMSAutocompleteResultsViewControllerDelegate?”并修复它说:“插入为! GMSAutocompleteResultsViewControllerDelegate“。 – Rocky

+0

@Rocky我相信你必须在这种情况下使用bang运算符'resultsViewController?.delegate = self as!GMSAutocompleteResultsViewControllerDelegate',这样你就不会返回一个可选的。更多关于类型casting [here](https:// 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) –