2016-05-23 1 views
0

Я использую NSTimer в приложении iOS в фоновом режиме, который сохраняет некоторые данные каждые 30 секунд в массиве. Приложение отображает последние 10 значений (значения 5 минут) в строке.NSTimer с рисованием barChart в фоновом режиме

Моя проблема заключается в использовании функции сохранения данных в массиве каждые 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

В делегат своего приложения вы можете использовать этот метод:

func applicationWillResignActive(application: UIApplication) {} 

Код добавления этой функции будет выполняться непосредственно перед ваше приложение идет в фоновом режиме. Поэтому вы можете написать там код, чтобы остановить счетчик.

После этого вам нужно использовать следующую функцию, чтобы активировать счетчик снова:

func applicationWillEnterForeground(application: UIApplication) {} 

код вы пишете в этой функции будет выполняться, когда вы вернетесь в приложение снова. Надеюсь, это достаточно ясно.

+0

спасибо. Это понятно. :) Но моя проблема в том, что я хочу получить доступ к методам из моего ViewControllerClass в AppDelegate, потому что там определен Timer. – FranzFerdinand

1

Я мог бы понять, что вы не хотите объявлять счетчик в делегате приложения по любой причине, если у вас есть, хотя я бы порекомендовал его. Однако вы можете вызвать функции, о которых я упоминал, из того же класса, в котором вы определили счетчик. Вам необходимо называть это следующим образом:

override func viewDidLoad() { 
    super.viewDidLoad() 

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

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

Затем сделайте то же самое с другой функцией. Надежда понятна.

+0

Привет. Эта функция работает, спасибо вам большое. Теперь у меня есть две функции-наблюдатели для resignActive и enterForeground, это хорошо. Но мой последний вопрос непонятен. У меня есть этот таймер в моем приложении. Как я могу сказать код, что он должен запускаться также в фоновом режиме и записывать данные в массив? – FranzFerdinand

+0

Дополнение: Да, я знаю, есть лучший способ, но я все еще участвую, и на этот момент это лучше. Я буду искать лучший способ, когда я лучше понимаю концепцию MVC в приложениях iOS. – FranzFerdinand

+0

у вас есть несколько способов ... Я бы рекомендовал вам следовать этому примеру: http: //stackoverflow.com/questions/28313702/trying-to-implement-beginbackgroundtaskwithexpirationhandler-and-uilocalnotifica Я бы также добавил, что iOS позволит для работы в фоновом режиме в течение 10 минут. –

 Смежные вопросы

  • Нет связанных вопросов^_^