簡體   English   中英

如何在applicationDidBecomeActive中確定它是否是最初的iPhone應用程序啟動?

[英]how to determine in applicationDidBecomeActive whether it is the initial iPhone app launch?

如何確定如何在UIApplicationDidBecomeActiveNotification中確定它是否是初始應用程序啟動?是否是初始應用程序啟動?

這是應用程序的初始啟動,而不是后續的DidBecomeActive,因為應用程序被放在后台然后到前台(例如用戶轉到日歷然后回到你的應用程序)

FWIW,接受的答案會告訴您之前是否有應用程序啟動,而不是應用程序是從后台恢復還是啟動。 一旦alreadyLaunched在首選項中設置了已啟動的密鑰,它將在將來啟動應用程序時返回YES (vs從后台恢復)。

要檢測應用程序是否已從后台恢復,您無需向首選項添加任何內容。 而是在您的應用程序委托實現中執行以下操作。

// myAppDelegate.m
//

@interface MyAppDelegate()
@property (nonatomic) BOOL activatedFromBackground;
@end

@implementation MyAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.activatedFromBackground = NO;

    // your code
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    self.activatedFromBackground = YES;

    // your code
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (self.activatedFromBackground) {
        // whatever you want here
    }
}

@end

在你的applicationDidFinishLaunching:withOptions:把這個:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"alreadyLaunched"];
[[NSUserDefaults standardUserDefaults] synchronize];

然后,在didBecomeActive

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"alreadyLaunched"]) {
    // is NOT initial launch...
} else {
    // is initial launch...
}

我曾經使用過@XJones提到的方法。 然后我意識到它有一個潛在的問題:如果“初始應用程序啟動”意味着檢查applicationDidBecomeActive是否自應用程序啟動以來第一次調用它! 因為當app重新啟動應用程序時(通過跳板,應用程序切換或URL),所有上述3個委托方法都將被調用! 所以最安全的方法是在applicationDidBecomeActive中重置self.activatedFromBackground。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM