当iOS应用程序第一次启动时检测?

如何检测iOS应用第一次启动的时间?

几乎和Marc和Chris说的一样,尽pipe我更喜欢在应用程序退出的时候改变它的值,以防应用程序需要知道多个区域。 在代码中:

// -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"]; 

我意识到这个问题是相当古老的,但我用它来提出一个方法来检测第一次启动后,“全新安装”(与升级/降级后第一次启动),并认为我会分享代码在这里未来的观众如果有帮助的话。

 // 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 (eg, 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]; 

我通常使用应用程序版本号,而不是用户默认值中firstLaunch值的布尔值。 这样,您可以区分第一次启动新安装和第一次启动升级。 可能在将来的版本中有用…

这是一个非常简单的快捷方式,但是我发现NSUserDefault键值对在第一次运行应用程序时总是为NULL

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

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

您可以在用户默认设置一个布尔值来做到这一点。 当您调用registerDefaults:时,将该键设置为false,然后将其设置为true,在显示初始帮助屏幕或您需要执行的任何操作后,将其更改为true。

如果您在应用程序closures后始终保存永久性数据文件,则检查其是否存在是另一种方式。

将其保存为用户首选项 ,例如had_first_launch,在启动时设置为true,它将只在第一次为false。

如果你想在代码的其他地方检测到它的第一次启动,这将无法正常工作。 由于多任务处理,“applicationWillTerminate”将无法在iOS 4.0上运行。 这个链接提供了一个很好的解决scheme: http : //mobiledevblog.metalcompass.com/?p=43