objective-c - iOS 超时功能无法正常工作

标签 objective-c ios cocoa-touch timeout

我在我的应用程序中添加了这段代码作为自动超时功能。 userDefaults doubleForKey:@"timeoutLength" 应该以分钟为单位。例如,如果值为 500,则应表示 500 分钟。

我似乎一直在打超时循环,尽管实际上还没有超过 500 分钟。我的代码有什么问题吗?可能是分钟/秒错误等。

    [userDefaults setDouble:[[userContextDictionary valueForKey:@"autologout_idle_timeout"] doubleValue] forKey:@"timeoutLength"];


    double timeDifference = ([[NSDate date] timeIntervalSince1970] - [userDefaults doubleForKey:@"Close Time"]) / 60;

    if (timeDifference > [userDefaults doubleForKey:@"timeoutLength"]) {
        NSLog(@"Timeout Hit");
    } else {
        NSLog(@"No Timeout");
    }

编辑:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [userDefaults setObject:[NSDate date]  forKey:@"Close Time"];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
    [userDefaults setDouble:[[userContextDictionary valueForKey:@"autologout_idle_timeout"] doubleValue] forKey:@"timeoutLength"];  
    //This is an int like 500, or 600, etc. 

    NSDate *closeDate = [userDefaults objectForKey:@"Close Time"]
    NSTimeInterval timeWhenClosedTimeInterval = [closeDate timeIntervalSince1970];
    NSTimeInterval todayTimeInterval = [[NSDate date] timeIntervalSince1970];

    NSTimeInterval timeDifference = ((todayTimeInterval - timeWhenClosedTimeInterval ) / 60);
    if (timeDifference > [userDefaults doubleForKey:@"timeoutLength"]) {
        NSLog(@"Timeout Hit");
    } else {
        NSLog(@"No Timeout");
    }
    return YES;
}

最佳答案

NSTimeInterval 以而不是分钟表示。

Here's the Apple doc where it's described .

我不能 100% 确定您的最终问题是什么,但 500 秒似乎还不够。

与此同时,我对您的代码进行了一些更改,以供自己演示:

NSDate * yesterday = [[NSDate date] dateByAddingTimeInterval: (-1 * 60 * 60 * 24 )];
NSTimeInterval yesterdayTimeInterval = [yesterday timeIntervalSince1970];
NSTimeInterval todayTimeInterval = [[NSDate date] timeIntervalSince1970];

// this properly converts timeDifference in seconds to minutes
NSTimeInterval timeDifference = ((todayTimeInterval - yesterdayTimeInterval ) / 60);
NSLog( @"time difference is %4.2f", timeDifference );

得出 1400 分钟(除以每小时 60 分钟 = 24 小时)。

关于objective-c - iOS 超时功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8365267/

相关文章:

Objective-C 插件架构安全性(Mac,不是 iPhone)

ios - Flutter与iOS原生页面相互跳转

iOS 旋转中心按钮

iphone - AVAudioPlayer初始化: error code -50

iphone - 使用界面生成器标签

ipad - 使用 WhirlyGlobeComponet 在地球上创建纬度线时出现问题

ios - 从API获取数据,需要过滤结果

在调用的方法中,iOS UI 元素不会更新

Objective-c 动态加载更多 UITableViewCell

ios - Appcelerator facebook登录按钮事件不适用于合金