Ich entwickle einen Code, der meine Position alle 10 Minuten und Erlösung in CoreData bekommen sollte. Wenn ich mit der conectavo-App in den Hintergrund gehe, kann xcode das Protokoll, auf dem der Dienst läuft, nicht sehen, aber wenn ich die Straßen betrete, wird er einfach nicht gespeichert oder gespeichert.Ort im Hintergrund funktioniert nicht
Dieser Teil meines Codes ist, dass dieser function.See speichert in codeData tun soll:
var saveLocationInterval = 60.0
func applicationDidEnterBackground(application: UIApplication) {
UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler(nil)
self.timer = NSTimer.scheduledTimerWithTimeInterval(saveLocationInterval, target: self, selector: #selector(AppDelegate.saveLocation), userInfo: nil, repeats: true)
NSRunLoop.currentRunLoop().addTimer(self.timer, forMode: NSRunLoopCommonModes)
locationController.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
saveLocation()
}
func saveLocation(){
print("======")
let logUser = NSEntityDescription.insertNewObjectForEntityForName("LOG_GPS", inManagedObjectContext: self.managedObjectContext) as! LOG_GPS
if locationController.location == nil{
logUser.latitude = ""
logUser.longitude = ""
} else {
logUser.latitude = "\(locationController.location!.coordinate.latitude)"
logUser.longitude = "\(locationController.location!.coordinate.longitude)"
}
logUser.velocidade = userSpeed > 0 ? Int(userSpeed) : 0
logUser.address = "\(userSpeed)"
if _usuario.chave != nil {
logUser.chave_usuario = "\(_usuario.chave!)"
}
if _empresa.chave != nil {
logUser.chave_licenca = "\(_empresa.chave!)"
}
print("localizaçao salva no bd \(logUser.latitude)")
let date = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd/MM/yy HH:mm:ss"
let dateString = dateFormatter.stringFromDate(date)
logUser.data = dateString
do {
try self.managedObjectContext.save()
} catch {
}
}
Ein weiterer großer Fehler in meinem Code kann ich nicht lösen, ist die Geschwindigkeit des Anwenders. Bei dem Verfahren bin versucht, die niedrige ich Ihre Geschwindigkeit in einer Variablen zu speichern und dann die Coredata speichern aber das ist mir immer einen negativen Wert zurück:
func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) {
var speed: CLLocationSpeed = CLLocationSpeed()
speed = newLocation.speed
print(speed * 3.6)
userSpeed = speed * 3.6
}
haben Sie UIBackgroundModes festgelegt? –
ja, das mache ich! – breno
Ich poste einen Screenshot – breno