2013-09-25 5 views
1

사용자가 로그인했을 때 loginVC 응용 프로그램이 있습니다. 12 시간 후에 응용 프로그램에서 -(void)logout 메서드를 호출하고 [self performSelector:@selector(logout) withObject:nil afterDelay:43200];, UserLoggedVC의 viewDidLoad 메서드에서 호출합니다. . 응용 프로그램이 afterDelay의 짧은 시간 매개 변수 (예 : 600 초 (10 분))로 열려 있거나 백그라운드에서 작동하는 경우이 메서드는 fine이라고하지만 시간이 43200 초 (12 시간) 인 경우 응용 프로그램은 background 메서드는 호출되지 않습니다.12 시간 후에 응용 프로그램을 다시 시작합니다. 목표 C

난 당신이

답변

2

Gabriele과 tdevoy의 답변에 왜 이것이 가능하지 않은지 명확하게 설명되어 있습니다.

당신의 viewDidLoad에서이

NSDate *currentDate= [NSDate date]; 
[[NSUserDefaults standardUserDefaults] setObject:currentDate forKey:@"loggedInTime"]; 
같은 NSUserDefaults 시간에 기록 저장 : 당신이 그것을 할 방법을 찾을 수 없습니다 대신 그래서 만약 내가 같은 일을 반복하고 있지 않다, 이것은 당신이 시도 할 수있는 방법입니다 사용자가 지속적으로 12 시간 동안 응용 프로그램을 사용하는 경우 응용 프로그램이 배경에서 오는 경우에만이 호출로 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.) 

을하지만, 당신은 너무 당신의 코드를 사용하는 것이 좋습니다 .

4

performSelector: withObject: afterDelay:은 본질적으로 단지 타이머와 타이머가 백그라운드에서 허용되지 않습니다 나를 도울 수 있기를 바랍니다.

대신 사용자가 처음으로 응용 프로그램에 로그인하여 저장하면 시간 소인을 기록해야합니다. 그런 다음 응용 프로그램이 포 그라운드로 올 때마다 현재 시간에서 로그인 시간까지 12 시간인지 확인하십시오.

2

응용 프로그램이 12 시간 동안 메모리에있을 것으로 예상 할 수 없습니다. 응용 프로그램이 백그라운드에서 실행되면 결국 OS가이를 종료하므로 메서드가 실행되지 않습니다.

여기 접근법은 마지막 사용자 활동 날짜를 저장하고 사용자가 앱을 열 때 현재 활동 상태를 확인하거나 서버 측 검사를 수행하고 로그 아웃하도록 강제 할 수 있습니다.