【问题标题】:Detect when app is opened for the first time after launch检测启动后首次打开应用程序的时间
【发布时间】:2011-02-22 00:57:10
【问题描述】:

我只想在第一次安装和打开应用时在视图控制器上显示帮助消息。

我有什么方法可以做到这一点吗?

【问题讨论】:

    标签: ios cocoa-touch uiviewcontroller


    【解决方案1】:

    您可以显示一次帮助消息,然后在NSUserDefaults 中存储一个布尔值以指示它不应再次显示:

    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
    BOOL appHasBeenLaunchedBefore = [userDefaults boolForKey:@"HasBeenLaunched"];
    if (!appHasBeenLaunchedBefore)
    {
        [self showHelpMessage];
    }
    [userDefaults setBool:YES forKey:"HasBeenLaunched"];
    

    【讨论】:

      【解决方案2】:

      使用 Grand Central Dispatch 的 dispatch_once() 并检查一些持久性存储。

      static dispatch_once_t pred;
      dispatch_once(&pred,^{
          NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
          BOOL hasLaunched = [userDefaults boolForKey:kAppHasLaunched];
          if (!hasLaunched) {
              [self showFirstLaunchMessage];
              [userDefaults setBool:YES forKey:kAppHasLaunched];
          }
      });
      

      这是确保代码在每次启动时仅在您的应用中运行一次的最简单方法(在这种情况下,该块将仅执行一次)。有关这方面的更多信息,请参阅the Grand Central Dispatch Reference。在此块中,您只需检查一些持久性存储,例如您的首选项,以查看您的应用是否曾经启动过,并根据需要显示一条消息。

      【讨论】:

        【解决方案3】:

        在用户默认值中使用一个键。例如:

        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        BOOL launchedBefore = [userDefaults boolForKey:@"hasRunBefore"];
        
        if(!hasRunBefore)
        {
            NSLog(@"this is my first run");
            [userDefaults setBool:YES forKey:@"hasRunBefore"];
        }
        

        用户默认设置由 iTunes 备份,因此通常是用户的首次启动,而不是每台设备的首次启动。

        编辑:这与 e.James 在我之前给出的答案明确相同。 “其他答案已发布”栏未能出现。我将把它留给示例代码,但第一个答案不值得称赞。

        【讨论】:

        • 滚出我的脑袋! ;) 但是 +1 提到了 iTunes 备份。我没想到。
        • 哦,现在您也添加了代码!我正在努力想一个不删除我的理由。很抱歉踩到你的脚趾。
        • 不用担心。有两个正确答案没有坏处。我们一定同时在打字!
        猜你喜欢
        • 2010-09-23
        • 1970-01-01
        • 2011-11-28
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多