繁体   English   中英

Swift错误“线程1:EXC_BAD_INSTRUCTION”和致命错误:在展开可选值时意外发现nil

[英]Swift Error “Thread 1:EXC_BAD_INSTRUCTION" and fatal error: unexpectedly found nil while unwrapping an Optional value

发生错误“ EXC_BAD_INSTRUCTION”,并出现胎儿错误“致命错误:在展开可选值时意外发现nil”。 这是什么意思,我该如何解决?

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)

错误: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

错误: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

        }

}
}

一些日志可能会有所帮助

消息“在展开可选值时意外发现nil”仅表示您正在强制展开为nil的可选项。

在这种情况下,您将lat定义为: private var lat : Double! 在哪里! 向编译器指示该变量应自动解包。 在此使用此变量之前未设置它: randomLatitude = lat + number1*(round(miles))*random ,导致崩溃。

看起来好像是在设置location之前正在加载视图,或者可能是locationnil 查看您的屏幕截图:

您的屏幕截图

暂无
暂无

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

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