应用程序未打开时执行Swift代码

时间:2016-05-16 12:40:00

标签: ios swift mobile realm

我希望能够在5秒内运行一个计时器,以便继续使用locationManager查找位置,并使用另一个类weather.swift中的函数从外部JSON API获取信息,并将此信息添加到Realm数据库。我已将所有这些工作放在前台,但我不知道如何让它在后台工作。我启用了后台功能,并允许在info.plist中在后台工作。

使用 AppDelegate ,在测试 applicationDidEnterBackground(应用程序:UIApplication)时,我能够了解如何在后台使用应用程序。功能。当应用程序退出时,我能够立即打印并执行代码行,但是当我尝试设置计时器并不断获取位置,从API获取数据,并将此新信息添加到Realm数据库时,它会不行。此外,我们需要在 detectChange()函数中发生更改时推送通知。然而,当应用程序没有运行时,推送通知似乎有效。

问题:

  • locationManager无法正常工作。当应用程序未打开时,我真的不知道如何让它在后台运行。
  • 我不知道如何在应用程序未运行时让计时器继续运行。它根本不起作用。

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()
}

0 个答案:

没有答案