我試圖讓我的地圖顯示從當前用戶位置到本地搜索位置的路線。Swift - 致命錯誤:在MKCoordinateRegionMakeWithDistance上展開可選值時意外發現爲零
我收到就行了EXC_BAD_INSTRUCTION:
let region = MKCoordinateRegionMakeWithDistance(userLocation.location.coordinate, 2000, 2000)`
就行了:
else {
self.showRoute(response)
}
我有一種感覺,無它接收來自用戶的位置,這是我」米不知道爲什麼它會收到零。
以下是完整的代碼爲我的視圖控制器如果需要的話:
class RouteViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var routeMap: MKMapView!
var destination = MKMapItem?()
override func viewDidLoad() {
super.viewDidLoad()
routeMap.showsUserLocation = true
routeMap.delegate = self
self.getDirections()
}
func getDirections() {
let request = MKDirectionsRequest()
request.setSource(MKMapItem.mapItemForCurrentLocation())
request.setDestination(destination!)
request.requestsAlternateRoutes = false
let directions = MKDirections(request: request)
directions.calculateDirectionsWithCompletionHandler({(response:
MKDirectionsResponse!, error: NSError!) in
if error != nil {
println("Error getting directions")
} else {
self.showRoute(response)
}
})
}
func showRoute(response: MKDirectionsResponse) {
for route in response.routes as! [MKRoute] {
routeMap.addOverlay(route.polyline,
level: MKOverlayLevel.AboveRoads)
for step in route.steps {
println(step.instructions)
}
}
let userLocation = routeMap.userLocation
let region = MKCoordinateRegionMakeWithDistance(
userLocation.location.coordinate, 2000, 2000)
routeMap.setRegion(region, animated: true)
}
func mapView(mapView: MKMapView!, rendererForOverlay
overlay: MKOverlay!) -> MKOverlayRenderer! {
let renderer = MKPolylineRenderer(overlay: overlay)
renderer.strokeColor = UIColor.blueColor()
renderer.lineWidth = 5.0
return renderer
}
}
而且SEGUE代碼:
override func prepareForSegue(segue: UIStoryboardSegue,
sender: AnyObject?) {
let routeViewController = segue.destinationViewController
as! RouteViewController
let indexPath = self.tableView.indexPathForSelectedRow()
let row = indexPath?.row
routeViewController.destination = mapItems[row!]
}
任何幫助,將不勝感激,謝謝!
您需要在使用之前檢查用戶的位置是否有效。它可能爲零,因爲該位置尚未確定或用戶拒絕位置許可或關閉位置服務。此外,我不確定蘋果對MKDirectionsHandler的定義 - 它說它有'MKDirectionsResponse!',但這可能是零,所以我本以爲它應該是'MKDirectionsResponse?' - 無論你需要檢查可能沒有 – Paulw11
@ Paulw11對不起這個愚蠢的問題,但我如何檢查該位置是否有效?我爲所有其他用戶位置使用相同的代碼,所以我不確定爲什麼它在這種情況下不起作用。我在執行代碼後第一次運行它,指示工作得很好。然後我關閉了構建,重新構建它,然後從此停止工作。 – Alec
通過有效,我的意思不是無。你應該總是防守編程,並檢查事情可能是零的地方。你有沒有通過調試器來確認它是/不是零?你在模擬器中運行嗎?你模擬了一個位置嗎? – Paulw11