我在后台的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中必须有背景方法,但现在不输入内容。 我认为必须有一个函数,它在背景中计算,当我回到应用程序时,它会重新加载图表。
答案 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) {}
当您再次返回应用程序时,您在此功能中编写的代码将会运行。希望它足够清楚。