Перезагрузить данные приложения, когда приложение выходит на передний план? - PullRequest
6 голосов
/ 15 октября 2010

Я новичок в разработке для iPhone ... Я создаю приложение, которое загружает данные из локальной базы данных sqlite3 в

-   (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   

Когда я нажимаю кнопку iPhone и помещаю его в фоновый режим, а затемНапомним, я вижу (как обычно) приложение так же, как я его покинул.То, что я хотел бы сделать, это, когда дело доходит до предела, перезагрузить данные, как если бы они были вызваны с нуля.

Какой правильный способ сделать это?

Заранее спасибо c.

Ответы [ 4 ]

62 голосов
/ 15 октября 2010

Итак, в классе App Delegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions будет вызываться только при первом входе в приложение. Затем оно будет вызывать - (void)applicationDidBecomeActive:(UIApplication *)application.

Если у вас iphone iOS 4.0 или более поздней версии, когда пользователь нажимает кнопку «Домой», он сначала вызывает - (void)applicationWillResignActive:(UIApplication *)application, затем - (void)applicationDidEnterBackground:(UIApplication *)application.

Тогда приложение будет работать в фоновом режиме, пока пользователь не убьет его. Когда пользователь снова входит в приложение, оно сначала вызывает - (void)applicationWillEnterForeground:(UIApplication *)application, затем - (void)applicationDidBecomeActive:(UIApplication *)application.

В связи с вашим вопросом вам следует позвонить либо applicationWillEnterForeground:, либо applicationDidBecomeActive:, чтобы перезагрузить ваши данные. Хотя в комментарии Xcode об этих методах Apple предлагает использовать applicationDidBecomeActive: для перезапуска приостановленных задач и / или обновления пользовательского интерфейса; в то время как в applicationWillEnterForeground: вы можете отменить изменения, внесенные вами при вводе фона.


Итак, чтобы было легче увидеть, я поставил числовой тег для каждого метода. Вот когда метод будет вызван.

0 application:(UIApplication *)application didFinishLaunchingWithOptions: 
1 applicationDidBecomeActive: 
2 applicationWillResignActive: 
3 applicationDidEnterBackground: 
4 applicationWillEnterForeground: 
  • Сначала введите приложение: позвоните 0, затем 1;

  • Хит кнопку домой: вызов 2, затем 3;

  • Двойная кнопка Home (многозадачность): вызов 2;

    • если пользователь выбрал другое приложение или снова нажал кнопку «Домой»: позвоните 3;

    • если пользователь снова дважды нажмет кнопку «Домой»: вызов 1;

  • Введите приложение еще раз: позвоните 4, затем 1;

13 голосов
/ 15 октября 2010
- (void)applicationDidBecomeActive:(UIApplication *)application {
}

Перезагрузите данные в вышеуказанной функции делегата приложения, чтобы обновить данные, когда приложение выходит на передний план.

4 голосов
/ 15 октября 2010

Вы можете exit() ваше приложение, когда iOS уведомляет его о том, что оно должно работать в фоновом режиме следующим образом:

- (void)applicationDidEnterBackground:(UIApplication *)application {
  exit(0);
}
3 голосов
/ 15 октября 2010

Я думаю, что это делегат UIApplication:

- (void)applicationWillEnterForeground:(UIApplication *)application

В iOS 4.0 и более поздних версиях этот метод называется частью перехода от фон для активного состояния. Вы можете использовать этот метод, чтобы отменить многие из изменений, которые вы внесли в ваш приложение при входе в фон. Вызов этого метода неизменно сопровождаемый звонком applicationDidBecomeActive: метод, который затем перемещает приложение из неактивное к активному состоянию.

...