isc*_*ers 161 iphone launch launching-application ios
我怎样才能检测到第一次发布
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// if very first launch than perform actionA
// else perform actionB
}
Run Code Online (Sandbox Code Playgroud)
方法?
小智 382
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
Zai*_*han 35
在Swift 3,4中试试这个:
func isAppAlreadyLaunchedOnce()->Bool{
let defaults = UserDefaults.standard
if let isAppAlreadyLaunchedOnce = defaults.string(forKey: "isAppAlreadyLaunchedOnce"){
print("App already launched : \(isAppAlreadyLaunchedOnce)")
return true
}else{
defaults.set(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
Run Code Online (Sandbox Code Playgroud)
在Swift 2试试这个,
func isAppAlreadyLaunchedOnce()->Bool{
let defaults = NSUserDefaults.standardUserDefaults()
if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce"){
print("App already launched : \(isAppAlreadyLaunchedOnce)")
return true
}else{
defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
Run Code Online (Sandbox Code Playgroud)
更新: -对于OBJ-C我使用这个,
+ (BOOL)isAppAlreadyLaunchedOnce {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isAppAlreadyLaunchedOnce"])
{
return true;
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isAppAlreadyLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
参考OBJ-C:https://stackoverflow.com/a/9964400/3411787
lms*_*lms 32
我为此目的写了一个小图书馆.它让我知道这是第一次启动,还是仅适用于此版本,以及用户安装的任何过去版本.它可以在github上作为Apache 2许可证下的cocoapod:GBVersionTracking
你只需要打电话给我 application:didFinishLaunching:withOptions:
[GBVersionTracking track];
Run Code Online (Sandbox Code Playgroud)
然后检查这是否是第一次启动只是在任何地方调用它:
[GBVersionTracking isFirstLaunchEver];
Run Code Online (Sandbox Code Playgroud)
同样地:
[GBVersionTracking isFirstLaunchForVersion];
[GBVersionTracking currentVersion];
[GBVersionTracking previousVersion];
[GBVersionTracking versionHistory];
Run Code Online (Sandbox Code Playgroud)
您可以使用下面的静态方法实现它:
+ (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;
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以在应用中的任何位置书写
if NSUserDefaults.standardUserDefaults().isFirstLaunch() {
// do something on first launch
}
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢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
}
}
Run Code Online (Sandbox Code Playgroud)
因为函数调用更具描述性:
if UIApplication.isFirstLaunch() {
// do something on first launch
}
Run Code Online (Sandbox Code Playgroud)
对于swift 3.0
添加扩展名
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
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中
UIApplication.isFirstLaunch()
Run Code Online (Sandbox Code Playgroud)