主题1:EXC_BAD_INSTRUCTION

时间:2016-01-14 20:22:46

标签: ios swift core-location

我正在制作此应用,用户可以在其中查看自己的位置和其他用户位置。我最近刚收到错误说

  

主题1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)

在这一行:

var lat = locationManager.location?.coordinate.latitude

我没有设法解决它。

导致它的原因以及如何解决?

对于任何可能想要其余代码的人:

import UIKit
import Parse
import CoreLocation
import MapKit


class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

    var myLocation: [CLLocation] = []

    @IBOutlet weak var MapView: MKMapView!
    @IBOutlet var UsernameTextField: UITextField!
    @IBOutlet var PasswordTF: UITextField!
    @IBOutlet var EmailTF: UITextField!

    var locationManager: CLLocationManager!

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

    }


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        let locationManager = CLLocationManager()

        let lat = locationManager.location!.coordinate.latitude
        let lon = locationManager.location!.coordinate.longitude

        let location = CLLocationCoordinate2D(latitude: lat, longitude: lon)
        let span = MKCoordinateSpanMake(0.05, 0.05)
        let region = MKCoordinateRegionMake(location, span)
        MapView!.setRegion(region, animated:  true)

        let anotation = MKPointAnnotation()
        anotation.coordinate = location
        anotation.title = "My tittle"
        anotation.subtitle = "My Subtitle"

        MapView!.addAnnotation(anotation)

        print("Welcome in MapViewController")
    }
}

2 个答案:

答案 0 :(得分:0)

问题是您要求位置管理员location而不检查结果是否为nil。嗯,这是(可能是因为还没来得及实际的位置)。因此,当您尝试获取该位置的纬度和经度latlon时,它们也是nil。因此,当你强行打开它们时,你会崩溃,因为你无法打开nil

答案 1 :(得分:0)

这是@matt所说的:

  

问题是您要求位置经理的位置   没有检查结果是否为零

以下是检查您的值是否为零的方法:

选项1:

guard let lat = locationManager.location?.coordinate.latitude else {
    return
}

选项2:

if let latCheck = locationManager.location?.coordinate.latitude {
    // assign your lat value here
} else {
   // handle the problem
}

当你看到!时,你可能需要改变你的思维方式,你可能应该以上述两种方式之一解开你的可选值。

根据评论进行更新:

您还可以尝试创建一个新变量来使用它,看看它是如何工作的:

guard let location = locationManager.location else {
    return
}

然后:

let lat = location.coordinate.latitude
let lon = location.coordinate.longitude