我遇到多任务问题。我应该知道iphone将我的应用程序放到后台后经过了多少秒。我尝试将applicationDidEnterBackground
和applicationWillEnterForeground
与NSDate对象一起使用,但无法成功获得时间。
任何人都能帮助我吗?
编辑:
- (void)applicationDidEnterBackground:(UIApplication *)application {
backgroundDate = [NSDate date];
NSLog(@"background time= %@", backgroundDate);
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
//– timeIntervalSinceNow
NSLog(@"background time2= %@", backgroundDate);
NSDate *date = [NSDate date];
NSLog(@"foreground time= %@", date);
}
日志:
2011-03-23 12:47:58.405 Sanal Market[1783:207] background time= 2011-03-23 10:47:58 +0000 2011-03-23 12:48:00.730 Sanal Market[1783:207] background time2= <CAContextImpl: 0x5416e10> 2011-03-23 12:48:00.731 Sanal Market[1783:207] foreground time= 2011-03-23 10:48:00 +0000
答案 0 :(得分:1)
你必须保留backgrounddate,[NSDate date]
返回一个自动释放的对象,在自动释放池耗尽后,这个消失了。
尝试
[backgroundDate release];
backgroundDate = [[NSDate date] retain];
或创建属性并使用setter。 self.backgroundDate = [NSDate date];
如果您想计算时间,即使应用程序在后台被迫退出操作系统,您也应该将日期保存到NSUserDefaults:
// save date in userdefaults
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"goingToBackGroundDate"];
// get date back to calculate time in background
NSDate *goingToBackGroundDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"goingToBackGroundDate"];