У меня есть требование для моего приложения, чтобы через определенный период (25 минут) оно выходило из системы). Как теперь рассчитать время, в течение которого приложение оставалось в фоновом режиме?

Я пытаюсь использовать метод - applicationDidBecomeActive, и для этого указан код по умолчанию с использованием метки времени и получения разницы между метками времени. проблема в том, что эта разница кажется странной, и я не могу ее понять. Проще говоря, я хочу получить разницу, но я не могу преобразовать в желаемые минуты / секунды. Я хотел бы сопоставить, равна ли эта разница 25 минутам или нет (или даже секундам). Любой простой фрагмент кода?

0
Vkharb 19 Мар 2015 в 15:17
Разместите свой код, он расскажет больше, чем ваша история.
 – 
rckoenes
19 Мар 2015 в 15:19
Я бы сделал это с помощью таймера на стороне сервера, который аннулирует текущий сеанс пользователя. Таким образом, когда приложение открыто и вы коснетесь базы с сервером, вы увидите, истек ли сеанс.
 – 
Fogmeister
19 Мар 2015 в 15:19
@rckoenes: это закомментированный код по умолчанию, указанный в -applicationdidResume в вашем appdelegate. Вы также можете увидеть это в любом случайном проекте (символов комментариев слишком мало, чтобы вставить его сюда). Как использовать этот фрагмент кода в течение определенных минут.
 – 
Vkharb
19 Мар 2015 в 15:52

1 ответ

Лучший ответ

Вы устанавливаете NSDate, где вы вводите фон:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    self.backgroundedDate = [NSDate date];
}

Затем, когда вы вернетесь на передний план, проверьте разницу во времени:

- (void)applicationWillEnterForeground:(UIApplication *)application {       
    if (self.backgroundedDate) {
        BOOL isTimedout =[self.backgroundedDate timeIntervalSinceNow] <= -(25 * 60);
        if (isTimedout) {
            [self.rootViewController presentLogin];
        }
    }
}
3
rckoenes 19 Мар 2015 в 15:20
Спасибо !! ваше решение сработало нормально. Есть ли способ, если это можно реализовать для previous_date = [[NSDate date] timeIntervalSince1970]; **** дата, рассчитанная через 10 минут current_date = [[NSDate date] timeIntervalSince1970]; NSInteger разница = текущая_дата - предыдущая_дата; это возвращает некоторое значение в наносекундах. Как это можно преобразовать в секунды или минуты
 – 
Vkharb
19 Мар 2015 в 15:43
timeIntervalSince1970 возвращает NSTimeInterval в секундах, так что вы хотите, чтобы минуты только что нырнули на 60.
 – 
rckoenes
19 Мар 2015 в 15:51
Предоставленный вами фрагмент кода работает в настоящее время и возвращает время в секундах, но тот, который я написал выше (также доступен в -applicationDidBecomeActive), возвращает миллисекунды. Даже разница двух дат возвращает нечетные значения, например 186, 142 и т. Д., Даже на короткие периоды.
 – 
Vkharb
19 Мар 2015 в 15:59
Все, что находится после десятичного разделителя, составляет миллисекунды, поэтому просто преобразуйте его из NSTimeInterval, который является double в NSInteger, и вы потеряете миллисекунды. Это действительно базовые вещи.
 – 
rckoenes
19 Мар 2015 в 16:03