как определить в applicationDidBecomeActive, является ли это первым запуском приложения iPhone? - PullRequest
9 голосов
/ 12 октября 2011

как определить, как определить в UIApplicationDidBecomeActiveNotification, является ли это начальным запуском приложения? Является ли это первоначальным запуском приложения?

, который является начальным запуском приложения, в отличие от последующих операций DidBecomeActiveприложение помещается в фоновый режим, а затем на передний план (например, пользователь переходит в календарь, а затем обратно в приложение)

Ответы [ 3 ]

27 голосов
/ 04 марта 2013

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
4 голосов
/ 12 октября 2011

В вашем 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...
}
0 голосов
/ 27 ноября 2013

Я использовал метод, упомянутый @XJones. Тогда я понял, что у него есть потенциальная проблема: если «первоначальный запуск приложения» означает проверить в applicationDidBecomeActive, был ли он вызван впервые с момента запуска приложения! Потому что, когда приложение перезапускало приложение (через трамплин, переключение приложения или URL-адрес), будет вызван весь вышеупомянутый метод делегата 3! Поэтому самый безопасный способ - сбросить self.activationFromBackground в applicationDidBecomeActive.

...