简体   繁体   English

类型“ UIViewController”的值没有成员“ mapView”; 您是说'loadView'吗?

[英]Value of type 'UIViewController' has no member 'mapView'; did you mean 'loadView'?

I try to Search for locations using MKLocalSearchRequest in Swift4 (for ios 12). 我尝试在Swift4(适用于iOS 12)中使用MKLocalSearchRequest搜索位置。 When I append the locationSearchTable.mapView = mapView at the end of viewDidLoad I get the error. 当我在viewDidLoad的末尾附加locationSearchTable.mapView = mapView时,出现错误。

In ViewController 在ViewController中

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {


    @IBOutlet weak var mapView: MKMapView!

    let locationManager = CLLocationManager()
    var resultSearchController: UISearchController? = nil

    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()

        let locationSearchTable = storyboard!.instantiateViewController(withIdentifier: "LocationSearchTable")
        resultSearchController = UISearchController(searchResultsController: locationSearchTable)
        resultSearchController?.searchResultsUpdater = locationSearchTable as! UISearchResultsUpdating

        let searchBar = resultSearchController!.searchBar
        searchBar.sizeToFit()
        searchBar.placeholder = "Search for places"
        navigationItem.titleView = resultSearchController?.searchBar

        resultSearchController?.hidesNavigationBarDuringPresentation = false
        resultSearchController?.dimsBackgroundDuringPresentation = true
        definesPresentationContext = true

        locationSearchTable.mapView = mapView

    }...


In the LocationSearchTable 在LocationSearchTable中

import UIKit
import MapKit


class LocationSearchTable: UITableViewController {

    var matchingItems: [MKMapItem] = []
    var mapView: MKMapView? = nil

}

extension LocationSearchTable: UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {
        guard let mapView = mapView,
            let searchBarText = searchController.searchBar.text else { return }
        let request = MKLocalSearch.Request()
        request.naturalLanguageQuery = searchBarText
        request.region = mapView.region
        let search = MKLocalSearch(request: request)
        search.start { response, _ in
            guard let response = response else {
                return
            }
            self.matchingItems = response.mapItems
            self.tableView.reloadData()
        }
    }
}...

Maybe locationSearchTable is not LocationSearchTable class. 也许locationSearchTable不是LocationSearchTable类。

Try the following code 试试下面的代码

if let locationSearchTable = locationSearchTable as? LocationSearchTable {
    locationSearchTable.mapView = mapView
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM