Я пытаюсь удалить ключ пользователя по умолчанию, настроив таймер после входа пользователя в систему. После исследования и попытки я обнаружил, что таймер не запускается, когда приложение входит в фоновый режим.
Как очистить UserDefault для определенного ключа через 12 часов
Ответы (4)
Вы можете сохранить loginDate
по умолчанию пользователя и выполнить проверку с Date().timeIntervalSince(loginDate) > 12 * 60 * 60
в applicationDidBecomeActive(_ application: UIApplication)
Если вы хотите выполнять какую-либо задачу в фоновом режиме, вам необходимо включить фоновый режим для приложения. Но это позволит только несколько минут запускать приложение в фоновом режиме.
Вместо этого вы должны сохранить отметку времени входа в систему и проверять каждую didFinishLaunchingWithOptions
разницу во времени между текущим временем и временем, которое вы сохранили.
Используйте DispatchQueue.global вместо NSTimer , установите глобальную очередь в фоновый режим. И в исполнении используйте DispatchWorkItem.
DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + TimeInterval(yourtime interval value), execute: workItem)
var workItem = DispatchWorkItem {
// write your flush userdefault code here
}
После использования workItem отмените его.
self.workItem?.cancel()
Попробуй это
DispatchQueue.global(qos: .background).async {
// Write your code here timer running while app will not turminate
}