代码之家  ›  专栏  ›  技术社区  ›  Steph Thirion

检测何时首次启动iOS应用程序?[关闭]

  •  63
  • Steph Thirion  · 技术社区  · 16 年前

    如何检测首次启动iOS应用程序的时间?

    7 回复  |  直到 7 年前
        1
  •  81
  •   Noah Witherspoon    16 年前

    正如马克和克里斯所说,尽管我更喜欢在应用程序退出时更改值,以防应用程序的多个领域需要了解它。 在代码中:

    // -applicationDidFinishLaunching:
    [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]];
    // to check it:
    [[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"];
    // -applicationWillTerminate:
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];
    
        2
  •  59
  •   clint    15 年前

    我知道这个问题很古老,但我用它来提出 检测“新安装”后的第一次启动的方法(与升级/降级后的第一次启动相比),我认为我会在这里为将来的查看者共享代码,以防有用。

    // Get current version ("Bundle Version") from the default Info.plist file
    NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
    NSArray *prevStartupVersions = [[NSUserDefaults standardUserDefaults] arrayForKey:@"prevStartupVersions"];
    if (prevStartupVersions == nil) 
    {
        // Starting up for first time with NO pre-existing installs (e.g., fresh 
        // install of some version)
        [self firstStartAfterFreshInstall];
        [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:currentVersion] forKey:@"prevStartupVersions"];
    }
    else
    {
        if (![prevStartupVersions containsObject:currentVersion]) 
        {
            // Starting up for first time with this version of the app. This
            // means a different version of the app was alread installed once 
            // and started.
            [self firstStartAfterUpgradeDowngrade];
            NSMutableArray *updatedPrevStartVersions = [NSMutableArray arrayWithArray:prevStartupVersions];
            [updatedPrevStartVersions addObject:currentVersion];
            [[NSUserDefaults standardUserDefaults] setObject:updatedPrevStartVersions forKey:@"prevStartupVersions"];
        }
    }
    
    // Save changes to disk
    [[NSUserDefaults standardUserDefaults] synchronize];
    
        3
  •  29
  •   Daniel    16 年前

    我通常在用户默认值中使用app版本号而不是boolean作为firstlaunch值。这样,您就可以区分新安装的第一次启动和升级的第一次启动。可能在将来的版本中有用…

        4
  •  4
  •   NSCoder    13 年前

    这是一个非常简单的快捷方式,但我发现第一次运行应用程序时,nsUserDefault键值对始终为空,因此

    // Check to see if its the first time
    if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) {
       [[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"];
    }
    

    并将此代码放在应用程序启动时出现的视图控制器的awakefromnib中。我不知道其他答案是否适用于你的问题,但这就是我解决问题的方法。

        5
  •  2
  •   Marc Charbonneau    16 年前

    您可以在用户默认值中设置一个布尔值来执行此操作。调用时将密钥设置为false registerDefaults: ,然后将其设置为“真”,在显示初始帮助屏幕或需要执行的任何操作后将其更改为“真”。

    如果你有一个持久的数据文件,总是在应用关闭后保存,那么检查它是否存在将是另一种方法。

        6
  •  2
  •   Chris Kimpton    16 年前

    将它保存为 user preference 例如,在启动时设置为“真”,在第一次启动时设置为“假”…

        7
  •  2
  •   MCO    14 年前

    如果您想在代码的其他位置检测它的第一次启动,这将无法正常工作。由于多任务,“applicationwillterminate”无法在iOS 4.0上工作。 此链接提供了一个很好的解决方案: http://mobiledevblog.metalcompass.com/?p=43