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

时间:2008-11-21 13:51:36

标签: ios cocoa-touch launching-application

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

7 个答案:

答案 0 :(得分:81)

Marc和Chris说的很多,但我更喜欢在应用程序退出时更改值,以防应用程序的多个区域需要了解它。 在代码中:

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

答案 1 :(得分:59)

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

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

答案 2 :(得分:29)

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

答案 3 :(得分:4)

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

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

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

将其保存为user preference,例如had_first_launch,在启动时设置为true,第一次只会为false ...

答案 6 :(得分:2)

如果要在代码的其他位置检测首次启动时,这将无法正常工作。由于多任务处理,“applicationWillTerminate”无法在iOS 4.0中运行。 这个链接提供了一个很好的解决 http://mobiledevblog.metalcompass.com/?p=43

相关问题