在应用程序中计算和节省用户使用时间的最佳方法

时间:2012-11-02 17:00:15

标签: objective-c ios nstimer nstimeinterval

在我的应用程序中计算用户使用时间的最佳方法是什么。可以将其保存在NSUserDefaults中吗?我应该以哪种格式保存它?

我想知道用户是否允许说播放应用程序3-4次,每次他已经玩了2个小时,所以我希望每次都将时间添加到以前的时间,所以现在我会在那里6个小时。

谢谢!

1 个答案:

答案 0 :(得分:2)

我确实建议使用NSUserDefaults。

在didFinishLaunching中将当前日期存储在app委托的ivar中:

你的AppDelegate.h中的

NSDate *startTime;

并在你的.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  startTime=[NSDate date]; //stores the current time in startTime
}

现在每次用户暂停/关闭应用时,计算startTime和当前时间之间的差异,并将其添加到NSUserDefaults中的值:

- (void)applicationDidEnterBackground:(UIApplication *)application {
  double diff=[startTime timeIntervalSinceNow]*(-1); //timeIntervalSinceNow is negative because startTime is earlier than now
  NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
  [defaults setDouble:[defaults doubleForKey:@"Time"]+diff forKey:@"openedTime"]
}

再次将当前日期存储在didBecomeActive中:

- (void)applicationDidBecomeActive:(UIApplication *)application {
startTime=[NSDate date];
}

然后,您可以使用

获取使用时间
double usedTime=([startTime timeIntervalSinceNow]*(-1))+[[defaults doubleForKey:@"Time"] doubleForKey:@"Time"];

如果您只想获得自上次用户启动应用以来的开放时间,请在didFinishLaunching中重置opensTime

[defaults setDouble:0.0f forKey:@"openedTime"]

希望这有帮助。