如何确定如何在UIApplicationDidBecomeActiveNotification中确定它是否是初始应用程序启动?是否是初始应用程序启动?
这是应用程序的初始启动,而不是后续的DidBecomeActive,因为应用程序被放在后台然后放到前台(例如用户转到日历然后回到你的应用程序)
答案 0 :(得分:27)
FWIW,接受的答案会告诉您之前是否有应用程序启动,而不是应用程序是从后台恢复还是启动。在偏好设置中设置了alreadyLaunched
密钥后,将在以后启动应用时返回YES
(与从后台恢复)。
要检测应用程序是否已从后台恢复,您无需向首选项添加任何内容。而是在您的应用委托实施中执行以下操作。
// 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
答案 1 :(得分:4)
在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...
}
答案 2 :(得分:0)
我曾经使用过@XJones提到的方法。然后我意识到它有一个潜在的问题:如果“初始应用程序启动”意味着检查applicationDidBecomeActive是否自应用程序启动以来第一次调用它!因为当app重新启动应用程序时(通过跳板,应用程序切换或URL),所有上述3个委托方法都将被调用!所以最安全的方法是在applicationDidBecomeActive中重置self.activatedFromBackground。