很奇怪。有些设备会崩溃,有些设备则没有。问题是,当位置未激活时,应用程序永远不会死亡,但是当我允许我的应用程序访问某些设备崩溃的位置时,以及其他设备中没有。
这是代码:
longitude = self.locationManager.location!.coordinate.longitude
latitude = self.locationManager.location!.coordinate.latitude
当应用程序崩溃时,错误指向此行:
customers
我已经在10个设备上测试了应用程序,其中有1-2个设备在此时崩溃。
发生了什么?我认为我正确地管理要做什么以及什么时候不允许做位置。
答案 0 :(得分:4)
你应该知道
self.locationManager.location
使用前为空
答案 1 :(得分:1)
请尝试使用整个代码来获取位置及其详细信息。在Swift 3.0中尝试使用的解决方案
import CoreLocation
import Foundation
class ViewController: UIViewController,CLLocationManagerDelegate {
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
findMyLocation()
}
func findMyLocation(){
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {(placemarks, error)->Void in
if (error != nil) {
print("Reverse geocoder failed with error" + error!.localizedDescription)
return
}
if placemarks!.count > 0 {
let pm = placemarks![0]
self.displayLocationInfo(pm)
} else {
print("Problem with the data received from geocoder")
}
})
}
func displayLocationInfo(_ placemark: CLPlacemark?) {
if let containsPlacemark = placemark {
//stop updating location to save battery life
locationManager.stopUpdatingLocation()
let locality = (containsPlacemark.locality != nil) ? containsPlacemark.locality : ""
let postalCode = (containsPlacemark.postalCode != nil) ? containsPlacemark.postalCode : ""
let administrativeArea = (containsPlacemark.administrativeArea != nil) ? containsPlacemark.administrativeArea : ""
let country = (containsPlacemark.country != nil) ? containsPlacemark.country : ""
print(" Postal Code \(postalCode)")
print(" administrativeArea \(administrativeArea)")
print(" country \(country)")
print(" locality \(locality)")
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Error while updating location " + error.localizedDescription)
}
谢谢
答案 2 :(得分:0)
不要向变量声明可选值。总是处理错误 别打开位置
self.locationManager.location //您的错误
if var longitude = self.locationManager.location.coordinate.longitude {
// do your thing
}else {
// handle the error by declaring default value
}
第二件事你也可能会收到空值,即使用户在获取位置时丢失了互联网,或者你在模拟器中测试时忘记了模拟位置,所以总是处理错误
答案 3 :(得分:0)
请检查您的didUpdateLocations方法,您只需要检查位置是否正确或是否为零。
if((self.locationManager.location)!= nil){
//在此处获取位置信息。
}