6

我是 iPhone 开发的新手。我正在构建一个从本地 sqlite3 数据库加载数据的应用程序

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

当我点击 iPhone 按钮并将其置于背景中,然后我回想起它时,我会以与离开时相同的方式看到(正常)该应用程序。我想做的是,当它进入前台时,重新加载数据,就好像它是从头开始调用的一样。

哪种方法是正确的?
提前致谢。

4

4 回答 4

62

所以在 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: 
  • 先进入app:调用0,再调用1;

  • 按下主页按钮:呼叫 2,然后呼叫 3;

  • 双击主页按钮(多任务):调用2;

    • 如果用户选择另一个应用程序或再次点击主页按钮:调用 3;

    • 如果用户再次双击主页按钮:调用 1;

  • 再次进入app:先调用4,再调用1;

于 2010-10-15T16:31:15.983 回答
13
- (void)applicationDidBecomeActive:(UIApplication *)application {
}

在应用程序委托的上述函数中重新加载数据以在应用程序进入前台时刷新数据。

于 2010-10-15T14:36:49.533 回答
4

exit()当 iOS 通知它应该在后台运行时,您可以应用程序,如下所示:

- (void)applicationDidEnterBackground:(UIApplication *)application {
  exit(0);
}
于 2010-10-15T14:36:55.343 回答
3

我认为这是 UIApplication 的代表:

- (void)applicationWillEnterForeground:(UIApplication *)application

在 iOS 4.0 及更高版本中,此方法被调用作为从后台到活动状态转换的一部分。您可以使用此方法撤消您在进入后台时对应用程序所做的许多更改。调用此方法后总是调用 applicationDidBecomeActive: 方法,然后将应用程序从非活动状态移动到活动状态。

于 2010-10-15T14:37:39.943 回答