NSTimer与背景中的绘图barChart

时间:2016-05-23 07:51:20

标签: swift background nstimer

我在后台的iOS应用程序中使用NSTimer,它在数组中每30秒保存一些数据。该应用程序在折线图中显示最后10个值(值为5分钟)。

我的问题是当应用程序不在屏幕上时,使用在后台也每30秒将数据保存到数组中的功能。我已经写了很多关于此的主题,但我不明白。

我的计时器如下:

timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: (#selector(ViewController.counting)), userInfo: nil, repeats: true)
func counting() {
 timerCounter += 1 //Int
 if timerCounter%30==0 {
   arrayOfValues.append(...) //Appending the array
   reloadLineChart() // reload chart
 }
}

有谁能告诉我如何解决这个问题?我知道,ViewController中必须有背景方法,但现在不输入内容。 我认为必须有一个函数,它在背景中计算,当我回到应用程序时,它会重新加载图表。

2 个答案:

答案 0 :(得分:1)

我可能会理解你不想在app delegate中声明计数器,无论出于何种原因,尽管我会推荐它。但是,您可以从已定义计数器的同一个类中调用我提到的函数。你需要这样称呼它:

 override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector: "applicationWillResignActive:",
        name: UIApplicationWillResignActiveNotification,
        object: nil)
}

func applicationWillResignActive(notification: NSNotification) {
    // stop your counter
}

然后对其他功能执行相同操作。希望很清楚。

答案 1 :(得分:0)

在您的app委托中,您可以使用此方法:

func applicationWillResignActive(application: UIApplication) {}

您在此功能中添加的代码将在您的应用在后台运行之前运行。因此,您可以在那里写代码来停止计数器。

之后您需要使用以下功能再次激活计数器:

 func applicationWillEnterForeground(application: UIApplication) {}

当您再次返回应用程序时,您在此功能中编写的代码将会运行。希望它足够清楚。