- (void) applicationWillResignActive: (UIApplication *) приложение никогда не вызывается - PullRequest
5 голосов
/ 26 декабря 2009

Я пытаюсь обрабатывать телефонные звонки, ожидания и тому подобное. Я добавил функцию

- (void)applicationWillResignActive:(UIApplication *)application

и

- (void)applicationDidBecomeActive:(UIApplication *)application

на мой UIApplicationDelegate. При выходе из режима ожидания всегда вызывается applicationDidBecomeActive. Однако проблема «applicationWillResignActive» никогда не вызывается.

Мне было интересно, сталкивался ли кто-нибудь с этой проблемой и нашел ли кто-либо причину.

EDIT

Более подробно, я обнаружил, что цикл обновления моего движка, запускаемый из applicationDidFinishLaunching, заставлял меня пропустить сообщение. Я звоню

while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, .002, FALSE) == kCFRunLoopRunHandledSource);

для перехвата всех сообщений iphone, но, похоже, не перехватывает сообщение resignActive перед тем, как стать неактивным.

Попытка развить поток для моего цикла обновления приводит к странным ошибкам при сбое. У кого-нибудь есть предложения по быстрому исправлению?

Ответы [ 4 ]

6 голосов
/ 29 июня 2010

Его вызывают в iOS 4.0, когда нажимают кнопку Home.

Следующие методы делегата вызываются при нажатии кнопки «Домой» в iOS 4.0

- (void)applicationWillResignActive:(UIApplication *)application
{
  NSLog(@"Application Did Resign Active");
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}

А когда вы дважды нажмете кнопку «Домой» и снова запустите приложение, будут вызваны следующие методы делегата.

- (void)applicationWillEnterForeground:(UIApplication *)application
{
  NSLog(@"Application Will Enter Foreground");
}



- (void)applicationDidBecomeActive:(UIApplication *)application
{
  NSLog(@"Application Did Become Active");
}
2 голосов
/ 27 декабря 2009

Я не думаю

- (void)applicationWillResignActive:(UIApplication *)application

вызывается при получении телефонного звонка. Я думаю, что ОС ждет, пока пользователь не ответит, или отклонит телефонный звонок. Если я отказался, то приложение говорит "живым" и

- (void)applicationDidBecomeActive:(UIApplication *)application

называется. Если получен ответ, то вашему приложению говорят о выходе, и оно получит

- (void)applicationWillTerminate:(UIApplication *)application
0 голосов
/ 12 июня 2012
- (void)applicationWillResignActive:(UIApplication *)application {
/*
 Sent when the application is about to move from active state to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
 Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
 */
}
0 голосов
/ 28 декабря 2009

Обязательно разрешите

- (void)applicationDidFinishLaunching:(UIApplication *)application

чтобы вернуться до запуска игрового цикла. Одним из методов является использование функции

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay

на делегате приложения и запустите ваш игровой цикл после задержки, скажем, ".01". После того, как вы это сделаете, сообщение должно быть в состоянии правильно сработать. Я полагаю, что причиной помехи в сообщениях было то, что цикл выполнения застрял в applicationDidFinishLaunching и не смог отправить другие сообщения UIApplicationDelegate в очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...