我在我的应用程序中添加了这段代码作为自动超时功能。 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/