我正在制作此应用,用户可以在其中查看自己的位置和其他用户位置。我最近刚收到错误说
主题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")
}
}
答案 0 :(得分:0)
问题是您要求位置管理员location
而不检查结果是否为nil
。嗯,这是(可能是因为还没来得及实际的位置)。因此,当您尝试获取该位置的纬度和经度lat
和lon
时,它们也是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