0

このチュートリアルに従って、iPad アプリを 30 分後にタイムアウトするように設定しました。

これは、シミュレーターまたは Mac に接続された iPad 上の Xcode を介して完全に動作します。ただし、iPad を Mac から切断してアプリに再度ログインすると、タイムアウトしなくなりました。

なぜこれが起こるのか、誰かが光を当てることができるかもしれないと思っていました。

AppDelegate.m

-(void)applicationDidTimeout:(NSNotification *) notif
{
    NSLog (@"time exceeded!!");

    UIViewController *controller = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:NULL] instantiateViewControllerWithIdentifier:@"mainView"];

    [(UINavigationController *)self.window.rootViewController pushViewController:controller animated:YES];
}

TIMERUIApplication.h

@interface TIMERUIApplication : UIApplication
{
    NSTimer     *myidleTimer;
}

-(void)resetIdleTimer;

TIMERUIApplication.m

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

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

    NSSet *allTouches = [event allTouches];
    if ([allTouches count] > 0)
    {
        UITouchPhase phase = ((UITouch *)[allTouches anyObject]).phase;
        if (phase == UITouchPhaseBegan)
        {
            [self resetIdleTimer];
        }

    }
 }
-(void)resetIdleTimer
{
     if (myidleTimer)
    {
        [myidleTimer invalidate];
    }
    int timeout = kApplicationTimeoutInMinutes * 60;
    myidleTimer = [NSTimer scheduledTimerWithTimeInterval:timeout target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO];

}

-(void)idleTimerExceeded
{
    isLoggedIn = FALSE;
    numberOfFIlesAlreadyDownloaded = 0;
    numberOfFilesToBeDownloaded = 0;
    [[NSNotificationCenter defaultCenter]  postNotificationName:kApplicationDidTimeoutNotification object:nil];
}
4

1 に答える 1

0

いくつかのさらなる実験により、これは iPad Auto-Lock に少し絞り込まれました。

iPad がスリープ状態になると、アプリもスリープ状態になるため、タイマーが中断されます。

iPad を Mac に接続すると、自動ロックが無効になりました。

于 2013-04-30T14:06:20.750 に答える