2013-09-25 3 views
1

У меня есть приложение, которое имеет loginVC, когда пользователь вошел в систему. Я хочу, чтобы через 12 часов приложение вызывало метод -(void)logout, используя эти строки [self performSelector:@selector(logout) withObject:nil afterDelay:43200];, в методе viewDidLoad UserLoggedVC , , если приложение открыто или в фоновом режиме с коротким временным параметром в afterDelay, например, 600 секунд (10 минут), метод называется штрафом, но когда это длится 43200 секунд (12 часов), и приложение находится в фон метод никогда не вызывается.Перезапуск приложения после 12 часов объектива c

Я надеюсь, что вы можете мне помочь

ответ

2

Ответы Gabriele и tdevoy четко указывают, почему это невозможно. Так что я не повторять то же самое, а если вы не можете узнать, как это сделать, это то, как вы можете попробовать:

В вашем viewDidLoad, хранить вошедший во время в NSUserDefaults как этот

NSDate *currentDate= [NSDate date]; 
[[NSUserDefaults standardUserDefaults] setObject:currentDate forKey:@"loggedInTime"]; 

Теперь в методе applicationDidBecomeActive делегат

NSDate *loggedInTime = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"loggedInTime"]; 
NSTimeInterval timeSpentInApp = [[NSDate date] timeIntervalSinceDate:loggedInTime]; 
//if this timeSpentInApp is greater than 43200, then you can call logout. 
//(Make sure after relogin, the loggedInTime value was updated again.) 

Но, если пользователь постоянно использует приложение в течение 12 часов, то вам следует использовать фрагмент кода тоже, так как это будет вызывать только тогда, когда приложение приходит от фона ,

4

performSelector: withObject: afterDelay:, по существу, только таймер и таймеры не допускаются в фоновом режиме.

Вместо этого вы должны просто записать временную метку, когда пользователь впервые войдет в приложение и сохранит его. Затем каждый раз, когда приложение выходит на передний план, просто проверьте, не было ли это 12 часов от текущего времени до времени входа в систему.

2

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

Примером может быть либо сохранение даты последнего действия пользователя, либо проверка его на текущий, когда пользователь открывает приложение, или для выполнения проверки сервера и принудительного выхода из системы.