Hallo,
ich will für mich eine private App machen wo ich einfach meinen mit dem Fahrrad gefahrenen Weg aufzeichne. Wenn ich die App offen lasse (also das Handy nicht sperre) funktioniert es einwandfrei. Sobald ich es sperre und 10 Sekunden später entsperre dann wird die Route auch noch richtig eingezeichnet. Wenn ich es allerdings zB. 40 Sekunden gesperrt lasse dann ist die App gecrasht und hat sich geschlossen. Warum ? Wie kann ich die Ursache herausfinden?
[Blockierte Grafik: https://www.directupload.net/file/d/5345/i96msbrc_png.htm]Zusätzlich habe ich auch unter Capabilities -> Background Mode -> Location updates aktiviert und in der Info.plistfolgende Einträge eingetragen:
Hier der Code:
Alles anzeigen
Bildschirmfoto 2019-01-27 um 14.28.10.png
ich will für mich eine private App machen wo ich einfach meinen mit dem Fahrrad gefahrenen Weg aufzeichne. Wenn ich die App offen lasse (also das Handy nicht sperre) funktioniert es einwandfrei. Sobald ich es sperre und 10 Sekunden später entsperre dann wird die Route auch noch richtig eingezeichnet. Wenn ich es allerdings zB. 40 Sekunden gesperrt lasse dann ist die App gecrasht und hat sich geschlossen. Warum ? Wie kann ich die Ursache herausfinden?
[Blockierte Grafik: https://www.directupload.net/file/d/5345/i96msbrc_png.htm]Zusätzlich habe ich auch unter Capabilities -> Background Mode -> Location updates aktiviert und in der Info.plistfolgende Einträge eingetragen:
- Privacy - Location Always and When In Use Usage Description
- Privacy - Location When In Use Usage Description
Hier der Code:
Quellcode
- class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate{
- @IBOutlet weak var label: UILabel!
- @IBOutlet weak var mapView: MKMapView!
- @IBAction func start(_ sender: Any) {
- locationManager.startUpdatingLocation()
- }
- @IBAction func stop(_ sender: Any) {
- locationManager.stopUpdatingLocation()
- }
- let locationManager = CLLocationManager()
- var coordinates:[CLLocationCoordinate2D] = []
- var strSpeed:String = ""
- var strCourse:String = ""
- var gefahreneDistanz:Double = 0
- var informationArray:[String]?
- var index = 0
- override func viewDidLoad() {
- super.viewDidLoad()
- label.isHidden = false
- locationManager.delegate = self
- locationManager.desiredAccuracy = kCLLocationAccuracyBest
- locationManager.requestAlwaysAuthorization()
- mapView.delegate = self
- mapView.showsUserLocation = true
- }
- func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
- for location in locations{
- strSpeed = String(format: "Deine Geschwindigkeit beträgt %.1f km/h", location.speed*3.6)
- strCourse = String(format: "Dein Kurs: %.1f Grad", location.course)
- informationArray = [strSpeed, strCourse]
- let span = MKCoordinateSpan.init(latitudeDelta: 0.008, longitudeDelta: 0.008)
- let region = MKCoordinateRegion.init(center: mapView.userLocation.coordinate, span: span)
- mapView.setRegion(region, animated: true)
- coordinates.append(location.coordinate)
- let numberOfLocations = coordinates.count
- if numberOfLocations > 5{
- var pointToConnect = [coordinates[numberOfLocations - 1], coordinates[numberOfLocations - 2]]
- let polyline = MKPolyline(coordinates: &pointToConnect, count: pointToConnect.count)
- mapView.addOverlay(polyline)
- let distanz = gefahreneDistanzInKm(count: numberOfLocations)
- label.text = String(format: "%.2f km/h --- ", location.speed*3,6) + distanz + " KM"
- }
- }
- }
- func gefahreneDistanzInKm(count:Int) -> String{
- let point1 = CLLocation(latitude: coordinates[count - 1].latitude, longitude: coordinates[count - 1].longitude)
- let point2 = CLLocation(latitude: coordinates[count - 2].latitude, longitude: coordinates[count - 2].longitude)
- gefahreneDistanz = gefahreneDistanz + (point1.distance(from: point2)/1000)
- return String(format: "%.2f", gefahreneDistanz)
- }
- func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
- if overlay is MKPolyline{
- let renderer = MKPolylineRenderer(overlay: overlay)
- renderer.strokeColor = UIColor.red
- renderer.lineWidth = 5
- return renderer
- }
- return MKOverlayRenderer()
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- }
- }