Я пытаюсь сделать обновление местоположения возможным, даже если пользователь вышел из представления, возвращаясь к предыдущему виду. Чтобы это произошло, я создал отдельный класс, который обрабатывает мое обновление местоположения, но я встречаю странное поведение.Обновление местоположения не работает
Прежде всего, мой запрос на авторизацию появился только в течение секунды секунды, а затем исчез, поэтому я перенес его обратно в реальный вид. Однако мое обновление местоположения все еще не работает. Значок местоположения появляется на устройстве, но никогда не входит в функцию didLocationUpdate. Также он не вводит didFailWithError. Я довольно новичок в iOS, поэтому я понятия не имею, что я делаю неправильно.
Вот мой класс:
import CoreLocation
class RouteLocation: NSObject, CLLocationManagerDelegate{
var locationManager:CLLocationManager!
var databasePath = ""
override init(){
super.init()
let dirPaths =
NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
.UserDomainMask, true)
let docsDir = dirPaths[0] as NSString
databasePath = docsDir.stringByAppendingPathComponent(
"\\firstAscent.db")
// For use in foreground
locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
// locationManager.requestAlwaysAuthorization()
// print("in location")
if CLLocationManager.locationServicesEnabled() {
print("System Services enabled")
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.distanceFilter = 10
self.locationManager.startUpdatingLocation()
}
}
var isLocationMising = true
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
let latitute = locValue.latitude
let longitute = locValue.longitude
print("locations = \(locValue.latitude) \(locValue.longitude)") //continues to make SQL query calls
Я называю это с точки зрения с: _ = RouteLocation()
http://stackoverflow.com/a/38961606/6297658 – Dravidian
Я забыл упомянуть, что этот точный код работал, когда он был частью класса представления. – Xitcod13
Вы не показываете код, в котором вы размещаете экземпляр 'RouteLocation', но из вашего описания это похоже на то, что вы выделяете его в локальной переменной. Как только эта функция выходит, локальная переменная освобождается, что означает, что ваш экземпляр 'CLLocationManager' освобожден. Вы должны выделить свой объект 'RouteLocation' как свойство вашего AppDelegate или сделать его одиночным, чтобы он был долговечным. – Paulw11