2016-06-24 2 views
0

Fehler "EXC_BAD_INSTRUCTION" passiert und ein fetaler Fehler "fataler Fehler: unerwartet gefunden Null beim Auspacken eines optionalen Werts". Was macht es , und wie kann ich es beheben?Swift Fehler "Thread 1: EXC_BAD_INSTRUCTION" und fataler Fehler: unerwartet gefunden Nil beim Entpacken ein optionaler Wert

import UIKit 
import MapKit 
import CoreLocation 

class SliderViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate { 

    @IBOutlet weak var travelRadius: UILabel! 
    @IBOutlet weak var mapKitView: MKMapView! 
    @IBOutlet weak var slider: UISlider! 
    private var lat : Double! 
    private var long : Double! 
    private var randomLatitude : Double! 
    private var randomLongtitude : Double! 
    let number1 : Double = 0.01449275362319 //Latitude 1 mile change 
    let number2 : Double = 0.01810190649279 //Longtitude 1 mile change 
    let random = Double(arc4random())/Double(UInt32.max) + 0 


    var locationManager : CLLocationManager! 

    var location : CLLocation!{ 
     didSet { 
      lat = location.coordinate.latitude 
      long = location.coordinate.longitude 
     } 
    } 



    override func viewDidLoad() { 
     sliderSlides(self) 

Error: EXC_BAD_INSTRUCTION

 locationManager = CLLocationManager() 
     self.locationManager.delegate = self 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     self.locationManager.requestWhenInUseAuthorization() 
     checkCoreLocationPermission() 

     self.mapKitView.showsUserLocation = true 
    } 



    @IBAction func sliderSlides(sender: AnyObject) { 
     let miles = Double(self.slider.value) 
     let delta = miles/69.0 
     var currentRegion = self.mapKitView.region 
     currentRegion.span = MKCoordinateSpan(latitudeDelta: delta, longitudeDelta: delta) 
     self.mapKitView.region = currentRegion 
     travelRadius.text = "\(Int(round(miles))) mi" 
     randomLatitude = lat + number1*(round(miles))*random 

Error: EXC_BAD_INSTRUCTION randomLongtitude = long + number2*(round(miles))*(1-random)

} 





    func checkCoreLocationPermission() { 
     if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse { 
      locationManager.startUpdatingLocation() //Contains location details 
     } else if CLLocationManager.authorizationStatus() == .NotDetermined { 
      locationManager.requestWhenInUseAuthorization() 
     } else if CLLocationManager.authorizationStatus() == .Restricted { 
      print("Unauthorized to use location.") 
     } 
    } 


    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 


     location = locations.last 

     let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude) 
     let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 1.5, 
      longitudeDelta: 1.5)) 


     self.mapKitView.setRegion(region, animated: false) 

     self.locationManager.stopUpdatingLocation() 
    } 
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) 
    { 
     print ("Errors:" + error.localizedDescription) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if (segue.identifier == "sendLocationData") { 

      let nav = segue.destinationViewController as! UINavigationController 
      let addEventViewController = nav.topViewController as! DestinationViewController 
      addEventViewController.latitude = randomLatitude 
      addEventViewController.longitude = randomLongtitude 

     } 

} 
} 

Some Logs might be helpful

Antwort

0

Die Meldung "unerwarteterweise gefunden Null beim Entpacken eines optionalen Wertes" bedeutet nur, dass Sie ein optionales Element, das null ist, zwangsentpacken.

In diesem Fall definieren Sie lat als: private var lat : Double! wo die ! an den Compiler angibt, dass die Variable automatisch ausgepackt werden sollen. Diese Variable wird nicht gesetzt, bevor sie hier verwendet wird: randomLatitude = lat + number1*(round(miles))*random, was zum Absturz führt.

Es sieht so aus, als ob die Ansicht geladen wird, bevor location gesetzt wird, oder möglicherweise location ist nil. Sehen Sie Ihren Screenshot:

your screen shot