【发布时间】:2016-08-02 12:05:08
【问题描述】:
我正在开发一个代码,它应该每 10 分钟获取一次我的位置,并在 CoreData 中进行拯救。当我使用 conectavo app to xcode 进入后台时,看不到服务正在运行的日志,但是当我出去走在街上时,他根本没有保存或保存的次数太少。
这是我应该执行此功能的代码的一部分。请参阅保存在 codeData 中:
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 {
}
}
我无法解决的代码中的另一个主要错误是用户的速度。在方法中,我试图将你的速度保存在一个变量中,然后保存 CoreData 但是这是我总是返回一个负值:
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
}
【问题讨论】:
-
你设置 UIBackgroundModes 了吗?
-
我发布一个屏幕截图
-
我想我解决了你的问题;在我的答案下方评论告诉我它是否有效!
-
天哪,我才意识到我几个月前就回答了同样的问题......我很抱歉没有早点记得!无论如何,这肯定会解决您的问题:stackoverflow.com/questions/36524644/… 我会将其添加到我的答案中。
-
所以我的最终答案(肯定会为您解决)已添加到下面的答案中(
possible solution 2)。请让我知道它的效果如何!! (再次抱歉没有早点记住这个技巧。)
标签: ios swift core-data locationmanager