我希望能够在5秒内运行一个计时器,以便继续使用locationManager查找位置,并使用另一个类weather.swift中的函数从外部JSON API获取信息,并将此信息添加到Realm数据库。我已将所有这些工作放在前台,但我不知道如何让它在后台工作。我启用了后台功能,并允许在info.plist中在后台工作。
使用 AppDelegate ,在测试 applicationDidEnterBackground(应用程序:UIApplication)时,我能够了解如何在后台使用应用程序。功能。当应用程序退出时,我能够立即打印并执行代码行,但是当我尝试设置计时器并不断获取位置,从API获取数据,并将此新信息添加到Realm数据库时,它会不行。此外,我们需要在 detectChange()函数中发生更改时推送通知。然而,当应用程序没有运行时,推送通知似乎有效。
问题:
ViewController.swift:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
let lat = locValue.latitude
let long = locValue.longitude
latitude = lat
longitude = long
print("\(latitude) \(longitude)")
if((longitude != 0.0) && (latitude != 0.0)){
locationManager.stopUpdatingLocation()
weatherLabel.text = "\(weather.temperature(latitude, longitude: longitude))°"
cityLabel.text = weather.city(latitude, longitude: longitude)
currentInfo.locationz = weather.city(latitude, longitude: longitude)
windSpeedLabel.text = "\(weather.windSpeed(latitude, longitude: longitude)) mph"
self.windDirectionImageView.transform = CGAffineTransformMakeRotation((CGFloat(90 + weather.windDirection(latitude, longitude: longitude)) * CGFloat(M_PI)) / 180.0)
setImage(weather.icon(latitude, longitude: longitude))
var timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: #selector(UIMenuController.update), userInfo: nil, repeats: true)
}
}
func update(){
let instance = Instance()
addInstance(instance, timestamp: currentInfo.time(), temperature: weather.temperature(latitude, longitude: longitude), windSpeed: weather.windSpeed(latitude, longitude: longitude), windDirection: weather.windDirection(latitude, longitude: longitude), location: weather.city(latitude, longitude: longitude), condition: weather.description(latitude, longitude: longitude),icon: weather.icon(latitude, longitude: longitude))
detectChange()
}