如何检测首次启动
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// if very first launch than perform actionA
// else perform actionB
}
什么是方法?
如何检测首次启动
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// if very first launch than perform actionA
// else perform actionB
}
什么是方法?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
return YES;
}
BOOL
类型。2. 如果返回 0 导致崩溃,那么错误肯定出现在你的代码中... 可能是其他地方出了严重问题。 - user529758NSUserDefaults
不是一个常见的地方吗?如果另一个应用程序使用了我正在使用的相同“键”,会怎样呢? - Ziv Levy在 Swift 3, 4 中,可以尝试以下方法:
func isAppAlreadyLaunchedOnce()->Bool{
let defaults = UserDefaults.standard
if defaults.bool(forKey: "isAppAlreadyLaunchedOnce"){
print("App already launched : \(isAppAlreadyLaunchedOnce)")
return true
}else{
defaults.set(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
在 Swift 2 中,请尝试以下内容:
func isAppAlreadyLaunchedOnce()->Bool{
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.boolForKey("isAppAlreadyLaunchedOnce"){
print("App already launched : \(isAppAlreadyLaunchedOnce)")
return true
}else{
defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
更新:- 对于 OBJ-C,我使用这个:
+ (BOOL)isAppAlreadyLaunchedOnce {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isAppAlreadyLaunchedOnce"])
{
return true;
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isAppAlreadyLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
return false;
}
}
Objective-C 参考文献: https://dev59.com/1mkw5IYBdhLWcg3wVpFi#9964400
application:didFinishLaunching:withOptions:
中调用即可。[GBVersionTracking track];
然后要检查是否为首次启动,只需在任何地方调用以下内容:
[GBVersionTracking isFirstLaunchEver];
同样地:
[GBVersionTracking isFirstLaunchForVersion];
[GBVersionTracking currentVersion];
[GBVersionTracking previousVersion];
[GBVersionTracking versionHistory];
适用于 Swift 3.0 - Swift 5
添加扩展(extension)
extension UIApplication {
class func isFirstLaunch() -> Bool {
if !UserDefaults.standard.bool(forKey: "hasBeenLaunchedBeforeFlag") {
UserDefaults.standard.set(true, forKey: "hasBeenLaunchedBeforeFlag")
UserDefaults.standard.synchronize()
return true
}
return false
}
}
然后在你的代码中
UIApplication.isFirstLaunch()
Xcode 7和Swift 2.0的另一个想法是使用扩展功能。
extension NSUserDefaults {
func isFirstLaunch() -> Bool {
if !NSUserDefaults.standardUserDefaults().boolForKey("HasAtLeastLaunchedOnce") {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "HasAtLeastLaunchedOnce")
NSUserDefaults.standardUserDefaults().synchronize()
return true
}
return false
}
}
if NSUserDefaults.standardUserDefaults().isFirstLaunch() {
// do something on first launch
}
我个人更喜欢像这样扩展UIApplication的方式:
extension UIApplication {
class func isFirstLaunch() -> Bool {
if !NSUserDefaults.standardUserDefaults().boolForKey("HasAtLeastLaunchedOnce") {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "HasAtLeastLaunchedOnce")
NSUserDefaults.standardUserDefaults().synchronize()
return true
}
return false
}
}
因为函数调用更具描述性:
if UIApplication.isFirstLaunch() {
// do something on first launch
}
+ (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;
}
在启动时,您需要保存某些内容并检查其是否存在。如果不存在,则表示这是第一次。 "某些内容"可以是文件、数据库条目、用户默认设置中的设置等。
这很简单,只需要六行代码即可完成。
将此代码添加到应用程序启动首选项或其他任何需要测试应用程序是否首次运行的位置将非常有用。
//These next six lines of code are the only ones required! The rest is just running code when it's the first time.
//Declare an integer and a default.
NSUserDefaults *theDefaults;
int launchCount;
//Set up the properties for the integer and default.
theDefaults = [NSUserDefaults standardUserDefaults];
launchCount = [theDefaults integerForKey:@"hasRun"] + 1;
[theDefaults setInteger:launchCount forKey:@"hasRun"];
[theDefaults synchronize];
//Log the amount of times the application has been run
NSLog(@"This application has been run %d amount of times", launchCount);
//Test if application is the first time running
if(launchCount == 1) {
//Run your first launch code (Bring user to info/setup screen, etc.)
NSLog(@"This is the first time this application has been run";
}
//Test if it has been run before
if(launchCount >= 2) {
//Run new code if they have opened the app before (Bring user to home screen etc.
NSLog(@"This application has been run before);
}
注意:不要在首选项中使用布尔值,只需使用整数。当未定义时,它们默认为零。
此外,[theDefaults synchronize];
行并非必需,但我发现在数百个设备上运行数百次应用程序时,结果并不总是可靠的,而且这是更好的做法。
快速简便的功能
- (BOOL) isFirstTimeOpening {
NSUserDefaults *theDefaults = [NSUserDefaults standardUserDefaults];
if([theDefaults integerForKey:@"hasRun"] == 0) {
[theDefaults setInteger:1 forKey:@"hasRun"];
[theDefaults synchronize];
return true;
}
return false;
}
第一次将布尔键存储在NSUserDefaults中,它将是“否”,然后您将其更改为“是”,并保持这种状态直到应用程序删除或重新安装,那么它将再次是第一次。