如何在applicationDidBecomeActive中确定它是否是最初的iPhone应用程序启动?

时间:2011-10-11 23:32:39

标签: iphone ios background uiapplicationdelegate

如何确定如何在UIApplicationDidBecomeActiveNotification中确定它是否是初始应用程序启动?是否是初始应用程序启动?

这是应用程序的初始启动,而不是后续的DidBecomeActive,因为应用程序被放在后台然后放到前台(例如用户转到日历然后回到你的应用程序)

3 个答案:

答案 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。