【问题标题】:Auto Signout timer in app?应用程序中的自动注销计时器?
【发布时间】:2015-09-16 01:32:14
【问题描述】:

我需要做的是这个;我将有一个计时器,当 30 分钟结束时,我将自动注销用户。但如果与应用程序有任何交互,我会将计时器重置为 30 分钟。我知道该怎么做,但我确信有更好的方法来实现这一点。

我要做的是创建一个单例类,其中包含一个计时器并在计时器到时发布通知。所以我在想的是,每当用户按下按钮、进入下一个屏幕等时,我都必须重置计时器。

我的问题是是否可以在一段代码中响应应用程序中的任何触摸?就像不知何故有一个超类我可以添加它,无论发生什么样的交互,它总是会重置计时器?还是我需要将代码添加到用户将与应用程序交互的所有地方?

【问题讨论】:

    标签: ios nstimer touchesbegan touches


    【解决方案1】:

    你可以试试这个,子类UIApplication并在实现中添加以下代码

    @implementation MyApplication
    
    - (instancetype)init {
        self = [super init];
        if (self) {
            [self reset];
        }
        return self;
    }
    
    - (void)reset {
        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(logout) object:nil];
        [self performSelector:@selector(logout) withObject:nil afterDelay:30*60];
    }
    
    - (void)sendEvent:(UIEvent *)event {
        [super sendEvent:event];
    
        [self reset];
        NSLog(@"event detected");
    }
    
    - (void)logout {
        NSLog(@"logout now");
    }
    @end
    

    然后在main.m 中像这样更改实现

    return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), NSStringFromClass([AppDelegate class]));
    

    这里发生的事情是,- (void)sendEvent:(UIEvent *)event 方法将在每个用户活动之后被调用,然后我们在 30 分钟后注册一个执行选择器请求。一旦用户在 30 分钟内触摸屏幕,取消之前的请求并注册新的请求。

    【讨论】:

    • 谢谢我有空的时候试试这个。还在做别的事情。它看起来正是我需要的。因此,如果我查看UIApplication 类,我应该会看到一个名为-(void)senEvent) 的方法,每次应用程序中发生事件时都会调用该方法。我想知道该方法将被调用的事件的范围以及该方法如何与系统交互
    • 此事件与应用程序其余部分的交互在 ui 应用程序类中处理。这就是我们调用超级方法的原因。如果你评论超级电话我猜什么都不会发生(没有检查那个案例)
    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 2019-04-01
    • 1970-01-01
    • 2011-02-13
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多