Ich habe eine Singleton LocationManager-Klasse erstellt, um Standortaktualisierungen in meiner Anwendung zu verarbeiten. In der ersten Ansicht wird auf die gemeinsam genutzte Instanz in viewDidLoad
zugegriffen und ein Aufruf an getCurrentLocation
erfolgt. "Benutzerstandort wird abgerufen ..." wird auf der Konsole ausgegeben, die Delegatmethode didUpdateLocations
auf dem Standortmanager wird jedoch nie aufgerufen und der Standort wird nicht aktualisiert. Ich habe die erforderlichen Schlüssel in der info.plist und die Eingabeaufforderungen für erwartete Berechtigungen angezeigt.LocationManager Singleton didUpdateLocations wird nicht aufgerufen
Ich habe das Gefühl, dies ist ein Threading-Problem mit der LocationManager
fallen aus dem Anwendungsbereich, aber ich bin mir nicht sicher, wäre toll, wenn jemand mich in die richtige Richtung zeigen könnte!
Location Manager:
import Foundation
import CoreLocation
class LocationManager: NSObject, CLLocationManagerDelegate {
static let shared = LocationManager()
var manager: CLLocationManager!
override init() {
super.init()
self.manager = CLLocationManager()
self.manager.delegate = self
if CLLocationManager.authorizationStatus() == .notDetermined {
self.manager.requestWhenInUseAuthorization()
}
self.manager.desiredAccuracy = kCLLocationAccuracyBest
}
public func getCurrentLocation(){
print("Getting users location...")
self.manager.startUpdatingLocation()
}
func locationManager(manager:CLLocationManager, didUpdateLocations locations:[AnyObject]) {
self.manager.stopUpdatingLocation()
print("locations = \(locations)")
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print(error.localizedDescription)
}}
Viewcontroller:
import UIKit
Klasse Viewcontroller: UIViewController {
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var savedAreasTableView: UITableView!
@IBOutlet weak var noSavedAreasLabel: UILabel!
var manager: LocationManager! = LocationManager.shared
override func viewDidLoad() {
super.viewDidLoad()
self.noSavedAreasLabel.text = "You have no saved areas available !\nTo add some, search for a location and then favourite it."
//Check here to see if user has any favourited areas
self.savedAreasTableView.isHidden = true
self.noSavedAreasLabel.isHidden = false
self.manager.getCurrentLocation()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}}
War im Begriff, das gleiche Problem zu lokalisieren ... Ich glaube, Sie haben genagelt;) –
:) Entschuldigung, aber ich bin froh, dass wir den gleichen Gedanken hatten. –
... würde nur hinzufügen, dass diese Protokollmethode 'optional' ist, daher wird der Compiler sie nicht als Fehler behandeln (aber ich habe sowieso zumindest eine Warnung erwartet). –