检查iPhone应用程序是否首次运行的最佳方法
我想检查我的iPhone应用程序是否第一次运行。我可以在documents文件夹中创建一个文件,并检查该文件,以查看这是否是应用程序第一次运行,但我想知道是否有更好的方法来执行此操作。我喜欢使用NSUserDefaults来存储第一次运行的指示检查iPhone应用程序是否首次运行的最佳方法,iphone,iphone-sdk-3.0,Iphone,Iphone Sdk 3.0,我想检查我的iPhone应用程序是否第一次运行。我可以在documents文件夹中创建一个文件,并检查该文件,以查看这是否是应用程序第一次运行,但我想知道是否有更好的方法来执行此操作。我喜欢使用NSUserDefaults来存储第一次运行的指示 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if (![defaults objectForKey:@"firstRun"]) [defaults setOb
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...
}
在应用程序中,委托注册默认值:
NSDictionary *defaultsDict =
[[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"FirstLaunch", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDict];
[defaultsDict release];
然后在要检查的位置:
NSUserDefaults *sharedDefaults = [NSUserDefaults standardUserDefaults];
if ([sharedDefaults boolForKey:@"FirstLaunch"]) {
//Do the stuff you want to do on first launch
[sharedDefaults setBool:NO forKey:@"FirstLaunch"];
[sharedDefaults synchronize];
}
使用默认值。如果sharedDefault具有应用程序的密钥,则它将在之前运行。当然,你必须让应用程序在第一次运行时创建至少一个默认条目 好吧,是什么让我对用户默认设置感到困惑 它们存放在哪里
- 你不在乎它随iOS/Mac的不同而变化李>
- 您只需按键获取值
- 按键设置值+同步
- iOS/Mac将完成其余部分
//注意重要事项:如果您是ROOTVIEWCONTROLLER,请检查appDelegate.firstRun,然后确保在此处设置self.window.ROOTVIEWCONTROLLER之前执行上述检查
self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];
return YES;
}
----使用国旗
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.firstRun){
NSLog(@"IS FIRST RUN - Do something: e.g. set up password");
}else {
NSLog(@"FPMyMusicScreenViewController: IS NOT FIRST RUN - Prompt for password");
}
上面的例子让我有点困惑,因为它们第一次展示了如何检查,但在同一条评论中提到了如何“稍后检查”。
问题是当我们发现它不存在时,我们会立即创建它并进行同步。
因此,延迟检查实际上意味着当您重新启动应用程序时,与第一次运行的运行方式不同。您可以使用下面的静态方法来实现它。我认为这是更好的,因为你可以调用这个方法很多次,你喜欢,不像其他的解决方案。享受:(记住它不是线程安全的)
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"firstRun"])
[defaults setObject:[NSDate date] forKey:@"firstRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
您可以将自定义类别方法isFirstLaunch与UIViewController+FirstLaunch一起使用
- (BOOL)isFirstLaunch
{
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"kFirstLaunch"]) {
return YES;
}
else {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"kFirstLaunch"];
[[NSUserDefaults standardUserDefaults] synchronize];
return NO;
}
}
当您需要在控制器中使用它时
BOOL launched = [self isFirstLaunch];
if (launched) {
//if launched
}
else {
//if not launched
}
斯威夫特:
另一个提示:
使用NSUserDefaults时,如果删除应用程序,这些设置将被删除。如果出于某种原因,您要求这些设置仍然挂起,您可以将它们存储在钥匙链中。在哪里测试??应用程序内是否完成了启动方法??请将其放入
applicationdFinishLaunchingwithoptions
?@paultenerd避免使用速记!在这种情况下。即使具有键firstRun的对象存在且具有布尔值NO,它也会失败。如果该对象不存在,则返回nil,因此如果此处要使用([]!=nil)。如果用户更新应用程序,然后启动应用程序,会怎么样?是否应在If..stmt中将FirstLaunch设置为NO,以便它不会在下一次应用程序迭代中运行?@brian.clear,仅当您不需要确认用户看到了您想要显示的内容,不需要进行初始化/确认等。例如,在我第一次运行时,我希望用户确认他们看到了教程或选择跳过教程,而不是单击“打开”,然后锁定他们的手机,最终我的应用程序被挤出内存。听起来可能不太常见,但我在某处排队时下载了一个新应用程序,第一次启动该应用程序,然后立即锁定手机。b/c轮到我排队了。所以,这取决于用例。有意义吗?从iPhone模拟器中清除存储(这些“默认值”)的正确方法是什么?默认情况下,boolForKey将返回false,字符串将为nil等。如果要初始化用户默认值,只需使用registerDefaults以及要使用的键和值。如果要初始化日期,可以使用[NSDate distantFuture]
+ (BOOL)isFirstTime{
static BOOL flag=NO;
static BOOL result;
if(!flag){
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"hasLaunchedOnce"])
{
result=NO;
} else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
result=YES;
}
flag=YES;
}
return result;
}
- (BOOL)isFirstLaunch
{
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"kFirstLaunch"]) {
return YES;
}
else {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"kFirstLaunch"];
[[NSUserDefaults standardUserDefaults] synchronize];
return NO;
}
}
BOOL launched = [self isFirstLaunch];
if (launched) {
//if launched
}
else {
//if not launched
}
var isFirstLaunch: Bool {
get {
if (NSUserDefaults.standardUserDefaults().objectForKey("firstLaunchDate") == nil) {
NSUserDefaults.standardUserDefaults().setObject(NSDate(), forKey: "firstLaunchDate")
NSUserDefaults.standardUserDefaults().synchronize()
return true
}
return false
}
}