Я думаю, что самое простое, что вы можете сделать, это зарегистрировать приложение AppDelegate с помощью NSNotificationCenter
, чтобы прослушивать все события от всех (или, может быть, конкретных) отправителей.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetTimer) name:nil object:nil];
Вы должны заботиться с переходом nil
к параметрам name
и object
, как вы получите массу уведомлений (даже некоторые не происходящую из приложения, то есть, предупреждения памяти). Если вы знаете или имеете список конкретных имен событий и/или объектов, которые я бы заметил на них.
В вашем методе resetTimer
, вы просто аннулирует предыдущий таймер и создать новый, который будет вызывать некоторый logout
метод и установить в Ивар к текущей дате/времени (т.е. timerStart = [NSDate now];
)
Вышеуказанные шаги будут позаботьтесь о своем приложении, пока оно находится на переднем плане.
Когда приложение зашифровано, таймеры перестанут работать. Однако, когда приложение вернется на передний план, вы можете рассчитать дельта между [NSDate now]
и вашим timerStart
iVar. Если дельта больше некоторого интервала, вы вызываете свой метод logout
. Если нет, вы можете просто позвонить resetTimer
, чтобы снова запустить таймеры.
EDIT
Если вы хотите, чтобы приложение, чтобы фоновый предупредит о том, что пользователь собирается выйти из системы, вы можете использовать UILocalNotification
. Вы можете запланировать предупреждение, когда приложение заходит в фоновый режим. Когда приложение входит на передний план, вы можете отменить это уведомление (и выполнить описанные выше шаги).
Это были мои мысли о том, как это сделать, однако он не учитывает предупреждение центра уведомлений, когда пользователь получает время, когда приложение находится в фоновом режиме. – Bot