2011-10-13 133 views
5

我正在创建一个应用程序,我必须在应用程序第一次启动时创建plist。我稍后将使用plist来存储用户稍后输入的详细信息。我如何检测应用的首次发布?我正在试验NSUserDefaults,但我认为我做错了什么。检测应用程序的第一次运行

回答

15

你可以做到这一点NSUserDefaults的使用。但要注意版本号。

执行以下操作:

NSString *bundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; 

NSString *appFirstStartOfVersionKey = [NSString stringWithFormat:@"first_start_%@", bundleVersion]; 

NSNumber *alreadyStartedOnVersion = [[NSUserDefaults standardUserDefaults] objectForKey:appFirstStartOfVersionKey]; 
if(!alreadyStartedOnVersion || [alreadyStartedOnVersion boolValue] == NO) { 
    [self firstStartCode]; 
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:appFirstStartOfVersionKey]; 
} 

选择firstStartCode只能在时间上的第一个运行的每个应用程序版本被调用。

好吗?

+0

+1这就是我一直这样做的方式。 –

2

我喜欢使用NSUserDefaults来存储第一次运行的指示。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if (![defaults objectForKey:@"firstRun"]) 
    [defaults setObject:[NSDate date] forKey:@"firstRun"]; 

[[NSUserDefaults standardUserDefaults] synchronize]; 

然后,您可以在以后测试它...

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];   
if([defaults objectForKey:@"firstRun"])   
{ 
    // do something or not... 
} 

来自Best way to check if an iPhone app is running for the first time

+0

这样的一个代码块,我该把它放在应用程序委托didFinishLaunching下? – theNoobProgrammer

+0

是的,应该工作。 – CamelSlack

2

您可以使用以下方法:

-(void) firstLaunch { 
    //Code goes here 
} 

-(void) firstLaunchCheck { 
    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"didLaunchFirstTime"]) { 
     [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"didLaunchFirstTime"]; 
     [self firstLaunch]; 
    } 
} 
相关问题