2016-03-29 2 views
0

Я хочу обновить код внутри viewDidLoad() каждый новый день - даже если приложение не работает - закрыто или в фоновом режиме.Обновление каждый день (мой код работает?)

let Date = NSDate() 
let Calendar = NSCalendar.currentCalendar() 

var Days = 20 
var Hours = 5 
var Difference = 0 

override func viewDidLoad() { 

let FireDate = userCalendar.components(NSCalendarUnit.Hour, fromDate: Date) 

if (FireDate.hour == 7) { 
     days-- 
     Difference = (Days/Hours) 
    } 

} 

Этот код не работает, как я хочу.

ответ

1

Если этот код запущен на этапе 7, проверка будет успешной. То есть, 7 на устройстве, на котором он работает, с учетом настроек часовых поясов пользователей.

Этот код не будет автоматически запускаться каждый день. Вы не показываете, где находится код, но ничто не будет автоматически запускать приложение iOS в установленное время каждый день. Возможно, вы можете отправить тихий push в качестве триггера, но вы действительно должны планировать работу приложения, когда пользователь открывает его, а не автономно. Каждый раз, когда обработка чувствительного форума должен быть сделана сервером ...


Вы также можете посмотреть на использование func applicationSignificantTimeChange(_ application: UIApplication) так, что приложение говорят, когда на следующий день изменился, в сочетании с общей обработкой в ​​application:didFinishLaunchingWithOptions:.

+0

Хорошо! Благодарю. У вас есть представление о том, как я могу это сделать? Я хочу, чтобы код (обновленный) выполнялся каждый новый день - никакого конкретного времени не требуется. – Rappe

0

viewDidLoad вызывается один раз и один раз: когда ваш контроллер просмотра загружается. Пытаться называть это несколько раз приведет к неприятностям.

Обычно вы настраиваете некоторые вещи в viewDidLoad (вещи, которые должны быть настроены ровно один раз), а другие в viewDidAppear или viewWillAppear (вещи, которые могут быть настроены по-разному, если ваше представление появляется несколько раз).

Создайте новый метод, который будет выполнять ваши настройки, которые обычно бывают в viewDidAppear или viewWillAppear, убедившись, что проблем нет, если этот код вызывается несколько раз. Измените viewDidAppear или viewWillAppear, чтобы вызвать этот метод. Затем в viewDidLoad создайте таймер, который вызовет это в нужное время, а в dealloc сделает недействительным таймер.

Если ваше приложение находится в фоновом режиме, даже если представление не загружено, нет необходимости в этом. В любом случае никто не заметит. Таймер вызывается немедленно, когда ваше приложение выходит на передний план (если оно должно было быть вызвано), и если ваше приложение было закрыто, будет вызван viewDidAppear.

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