2014-01-16 2 views
1

Есть ли возможность узнать, будет ли WillResignActive из-за перемещения приложения на задний план или из-за открытия Центра управления/сообщений?Зная, что приложение перемещается на задний план в WillResignActive?

+3

Ваш вопрос остается неясным. Вы спрашиваете, знаем ли мы, что приложение ушло в отставку, потому что оно зашло в фоновый режим или был открыт Центр управления? –

+0

Спасибо за это, отредактировав вопрос – shannoga

ответ

0

Если ваше приложение переместилось на задний план, тогда будет отправлено сообщение DidEnterBackground. Вы можете проверить после небольшой задержки после WillResignActive, чтобы узнать, были ли отправлены оба сообщения.

EDIT: Проверьте этот код

@interface HSAppDelegate() 
{ 
    BOOL _enteredBackground; 
} 

@end 

@implementation HSAppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSLog(@"%s", __PRETTY_FUNCTION__); 
    _enteredBackground = NO; 
    _window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    _window.rootViewController = [HSViewController new]; 
    [_window makeKeyAndVisible]; 

    return YES; 
} 

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    NSLog(@"%s", __PRETTY_FUNCTION__); 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     if (!_enteredBackground) 
     { 
      // Do whatever you want here. 
     } 
     else 
     { 
      // This won't get called until the app comes back to foreground. 
     } 
    }); 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    NSLog(@"%s", __PRETTY_FUNCTION__); 
    _enteredBackground = YES; 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    NSLog(@"%s", __PRETTY_FUNCTION__); 
    _enteredBackground = NO; 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    NSLog(@"%s", __PRETTY_FUNCTION__); 
} 

@end 
+0

Спасибо. Дело в том, что мне нужно сделать действие в WillResignActive, и я не могу дождаться DidEnterBackground. – shannoga

+0

Я добавил пример кода для вас. Надеюсь, это поможет вам в правильном направлении. Причина, по которой он работает, заключается в том, что вызов 'dispatch_async' в одной очереди заставляет блок вызываться не следующим циклом запуска. –

Смежные вопросы