Согласно руководству по программированию приложения для iOS :
Возврат на передний план - это шанс вашего приложения перезапустить задачи
что он остановился, когда перешел на задний план. Шаги, которые происходят
при перемещении на передний план показаны на рисунке 3-6.
applicationWillEnterForeground: метод должен отменить все, что было
сделано в вашем applicationDidEnterBackground: метод, и
applicationDidBecomeActive: метод должен продолжать выполнять то же самое
задачи активации, которые были бы во время запуска .
Вы пытались повторно применить свои настройки в методе applicationDidBecomeActive:
вместо applicationWillEnterForeground:
?
Еще одна вещь, которую следует учитывать, это работа с уведомлениями:
В методах applicationDidBecomeActive:
или applicationDidBecomeActive:
AppDelegate вы можете указать своему делегату приложения отправлять уведомления контроллерам:
- (void)applicationDidBecomeActive:(UIApplication *)application {
/*
Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
*/
// Dispatch notification to controllers
[[NSNotificationCenter defaultCenter] postNotificationName: @"didBecomeActive"
object: nil
userInfo: nil];
}
Как только вы это сделаете, контроллер представления может зарегистрироваться для этих уведомлений (например, в их методе init) следующим образом:
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(loadSettings)
name: @"didBecomeActive"
object: nil];
Таким образом, ваш контроллер знает, что приложение только что стало активным, и может выполнить любой метод, который вы хотите.
В этом примере вы говорите своему контроллеру представления выполнить метод loadSettings
, когда он получает уведомление didBecomeActive
(которое было отправлено делегатом приложения).