ios在应用程序选择的时间间隔后自动注销用户?

时间:2015-08-31 10:22:45

标签: ios objective-c iphone xcode objective-c-blocks

在我的应用程序中,每当用户将应用程序闲置超过15分钟时,我的应用程序就会将用户从应用程序中注销。这对我来说非常合适。 再次当用户尝试登录时,他能够做到这一点。

但问题是,如果我登录到应用程序&我让我的应用空闲了15分钟,我收到一条错误消息,我的应用程序让我退出。

我仍然在屏幕上填充了错误消息,我还没有关闭该消息,并且我再次让我的应用闲置了15分钟。

现在,当我关闭错误消息并再次尝试登录应用时,它不允许我。

它总是给出一条消息"错误 - 一般错误消息"。

以下是我的代码: 我创建了一个UIApplication类

@interface PSATimerUIApplication : UIApplication
{

NSTimer *_idleTimer;

}

-(void)resetIdleTimer;


@implementation PSATimerUIApplication


- (void)sendEvent:(UIEvent *)event 
{
     [super sendEvent:event];

     // Fire up the timer upon first event

    if(!_idleTimer) 
    {
         [self resetIdleTimer];
    }

    // Check to see if there was a touch event

   NSSet *allTouches = [event allTouches];       

  if ([allTouches count] > 0){
      UITouchPhase phase = ((UITouch *)[allTouches anyObject]).phase;

      if (phase == UITouchPhaseBegan){

           [self resetIdleTimer];
      }
  }
}

-(void)resetIdleTimer{ 
    if (_idleTimer) {
        [_idleTimer invalidate];
    }

   // Schedule a timer to fire in kApplicationTimeoutInMinutes

  int timeout = PSAApplicationTimeoutInMinutes * 60;

  _idleTimer = [NSTimer scheduledTimerWithTimeInterval:timeout target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO];

}

-(void)idleTimerExceeded {
   /*Post a notification so anyone who subscribes to it can be notified when
   *the application times out */

    [[NSNotificationCenter defaultCenter]postNotificationName:PSAApplicationDidTimeoutNotification object:nil];
}

还更新了主要功能:

int main(int argc, char * argv[])
{
     @autoreleasepool 
     {
         return UIApplicationMain(argc, argv, NSStringFromClass([PSATimerUIApplication class]), NSStringFromClass([PSAAppDelegate class]));
    }
}

任何人都可以帮我解决这个问题吗? 我正在使用AFTNetworking1.0进行所有的http调用。

2 个答案:

答案 0 :(得分:0)

15分钟后如果应用程序空闲,应用程序将自动空闲。释放所有临时内存数据。因此,您可以防止15分钟后应用程序闲置(从设置中)或在15分钟之前执行。

答案 1 :(得分:0)

最好的方法是创建UserDefaults变量并将其用作标志。 当用户登录并处于活动状态时,将其设置为true。 如果用户注销或超时,请将变量设置为false。 并在该类的viewDidAppear和viewDidLoad中检查该标志是否为false。如果是,则弹出登录视图控制器。否则继续。