2016-03-15 44 views
-2

請幫我解決這個問題線程1:EXC_BAD_INSTRUCTION(代碼= EXC_I386_INVOP,子碼=爲0x0)獲得的緯度和經度時出現錯誤

import Foundation 
import UIKit 
import MapKit 

class DetailViewController : UIViewController { 

    @IBOutlet weak var mapView: MKMapView! 

    var selectedLocation : LocationModel? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(animated: Bool) { 
     // Create coordinates from location lat/long 
     var poiCoodinates: CLLocationCoordinate2D = CLLocationCoordinate2D() 

     poiCoodinates.latitude = CDouble(self.selectedLocation!.latitude!)! //Problem is in this line 
     poiCoodinates.longitude = CDouble(self.selectedLocation!.longitude!)! 
     // Zoom to region 
     let viewRegion: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(poiCoodinates, 750, 750) 
     self.mapView.setRegion(viewRegion, animated: true) 
     // Plot pin 
     let pin: MKPointAnnotation = MKPointAnnotation() 
     pin.coordinate = poiCoodinates 
     self.mapView.addAnnotation(pin) 

     //add title to the pin 
     pin.title = selectedLocation!.name 
    } 

} 
+1

'CDouble(self.selectedLocation!.latitude!)!'** **三點力解包成一排。你想知道它爲什麼崩潰!請閱讀關於Optionals和安全解包(「可選綁定」),以'if let'爲例,它會改變你的生活...... :) – Moritz

回答

0

我終於找到了解決方案,這裏有雲:

進口MapKit

class DetailViewController:UIViewController,MKMapViewDelegate {

//var mapType:UISegmentedControl! 
//var showPointsOfInterest:UISwitch! 


@IBOutlet weak var mapView: MKMapView! 

@IBAction func showDirection(sender: AnyObject) { 
} 

var selectedLocation : LocationModel? 
let locationManager = CLLocationManager() 
var currentPlacemark:CLPlacemark? 
//var segmentedControlAciton:UISegmentedControl! 

@IBAction func myLocation(sender: AnyObject) { 
    // Request for a user's authorization for location services 
    locationManager.requestWhenInUseAuthorization() 
    let status = CLLocationManager.authorizationStatus() 
    if status == CLAuthorizationStatus.AuthorizedWhenInUse { 
     mapView.showsUserLocation = true 


    } 

} 

//

override func viewDidLoad() { 
    super.viewDidLoad() 
    // mapView.showsUserLocation = true 
    title = selectedLocation?.name 

    mapView.delegate = self 
} 

override func viewDidAppear(animated: Bool) { 
    // Create coordinates from location lat/long 
    var poiCoordinates: CLLocationCoordinate2D = CLLocationCoordinate2D() 

    poiCoordinates.latitude = CDouble(self.selectedLocation!.latitude!)! 
    poiCoordinates.longitude = CDouble(self.selectedLocation!.longitude!)! 
    // Zoom to region 
    let viewRegion: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(poiCoordinates, 750, 750) 
    self.mapView.setRegion(viewRegion, animated: true) 
    // Plot pin 
    let pin: MKPointAnnotation = MKPointAnnotation() 
    pin.coordinate = poiCoordinates 
    self.mapView.addAnnotation(pin) 

    //add title to the pin 
    pin.title = selectedLocation!.name 
    pin.subtitle=selectedLocation!.address 
    mapView.showsScale = true 



} 
1

您還沒有初始化var selectedLocation : LocationModel?所以當你問self.selectedLocation!它崩潰。

補充說,需要初始化,並嘗試重構你的代碼在此 方式:

override func viewDidAppear(animated: Bool) { 
    guard let location = self.selectedLocation, let latitude = location.latitude, let longitude = location.longitude else { 
    return //Here was an error, so you can not continue, report it or do something about it before returning 
    } 

    // Create coordinates from location lat/long 
    var poiCoodinates: CLLocationCoordinate2D = CLLocationCoordinate2D() 

    poiCoodinates.latitude = CDouble(latitude)! 
    poiCoodinates.longitude = CDouble(longitude)! 
    // Zoom to region 
    let viewRegion: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(poiCoodinates, 750, 750) 
    self.mapView.setRegion(viewRegion, animated: true) 
    // Plot pin 
    let pin: MKPointAnnotation = MKPointAnnotation() 
    pin.coordinate = poiCoodinates 
    self.mapView.addAnnotation(pin) 

    //add title to the pin 
    pin.title = location.name 
} 
相關問題