gpt4 book ai didi

swift - 在 didselectrowatindexpath 中更新谷歌地图相机时展开 nil 可选

转载 作者:行者123 更新时间:2023-11-30 14:09:52 25 4
gpt4 key购买 nike

我正在使用 google-maps-sdk,并且在同一个 viewcontroller< 中有一个 UITableView 和一个 GMSMapView/。我将自动完成搜索结果放入tableview中,并且我想将 map 移动到用户选择的单元格表示的位置。我正在尝试在 didSelectRowAtIndexPath 方法中更新 map ,但我不断收到“未包装的 nil 可选错误”。这非常令人困惑,因为我实际上将可选值分配给了上面一行我尝试解开它的值。

将 self.mapview 分配给相机时出现错误。任何帮助/想法将不胜感激。谢谢!

ViewDidLoad方法

override func viewDidLoad() {
super.viewDidLoad()

self.tableView.dataSource = self
self.tableView.delegate = self

self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()
controller.hidesNavigationBarDuringPresentation = false
self.navigationItem.titleView = controller.searchBar
//self.tableView.tableHeaderView = controller.searchBar
return controller
})()

placesClient = GMSPlacesClient()

var camera: GMSCameraPosition = GMSCameraPosition.cameraWithLatitude(-33.86,
longitude: 151.20, zoom: 6)
self.mapSubView.camera = camera
self.mapSubView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
self.mapSubView.myLocationEnabled = true



var marker = GMSMarker()
marker.position = CLLocationCoordinate2DMake(-33.86, 151.20)
marker.title = "Sydney"
marker.snippet = "Australia"
marker.map = mapSubView


}

didSelectRowAtIndexPath 方法

  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
view.sendSubviewToBack(self.tableView)
var result = searchResults[indexPath.row]
var camera = GMSCameraPosition.cameraWithLatitude(42.37, longitude: -71.109734, zoom: 16)
self.mapSubView.camera = camera
self.mapSubView = GMSMapView.mapWithFrame(self.mapSubView.bounds, camera: self.mapSubView.camera)

}

最佳答案

现在我清楚地知道你的问题出在哪里:

if let mapSubView2 = self.mapSubView {
mapSubView2.camera = camera
self.mapSubView = mapView
}

这个条件永远不会满足,所以这就是为什么你的mapSubView为零。为什么?我认为你的意图是写类似的东西

if let mapSubView2 = mapView {
mapSubView2.camera = camera
self.mapSubView = mapSubView2
}

但是你可以跳过所有这些检查并直接分配mapSubView,如下

self.mapSubView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
self.mapSubView.myLocationEnabled = true

关于swift - 在 didselectrowatindexpath 中更新谷歌地图相机时展开 nil 可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31879805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com