2010-10-04 6 views
26

Wie kann ich erkennen, dass eine App gerade von "Hintergrundmodus" zurückgekehrt ist? Ich meine, ich möchte nicht, dass meine App Daten abruft (alle 60 Sekunden), wenn der Benutzer die "Home-Taste" drückt. Aber ich möchte ein "spezielles" Update machen, wenn die App zum ersten Mal im Vordergrundmodus ist.iphone 4 sdk: erkennen Rückkehr aus dem Hintergrund-Modus

Wie kann ich erkennen, diese beiden Ereignisse:

  1. App
  2. App gehen in den Vordergrund Modus

Vielen Dank im Voraus den Hintergrundmodus gehen.

François

Antwort

48

Hier ist, wie für solche Ereignisse hören:

// Register for notification when the app shuts down 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillTerminateNotification object:nil]; 

// On iOS 4.0+ only, listen for background notification 
if(&UIApplicationDidEnterBackgroundNotification != nil) 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationDidEnterBackgroundNotification object:nil]; 
} 

// On iOS 4.0+ only, listen for foreground notification 
if(&UIApplicationWillEnterForegroundNotification != nil) 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillEnterForegroundNotification object:nil]; 
} 

Hinweis: Die if(&SomeSymbol) Kontrollen stellen sicher, dass Ihr Code auf iOS arbeiten 4.0+ und auch auf iOS 3.x - wenn Sie bauen gegen ein iOS 4.x oder 5.x SDK und setzen Sie das Implementierungsziel auf iOS 3.x Ihre App kann immer noch auf 3.x-Geräten laufen, aber die Adresse der relevanten Symbole wird Null, und deshalb wird es nicht versuchen zu fragen für Benachrichtigungen, die nicht auf 3.x-Geräten vorhanden sind (was zum Absturz der App führen würde).

Update: In diesem Fall werden die if(&Symbol) prüft nun überflüssig sind (es sei denn, Sie wirklich müssen iOS 3 aus irgendeinem Grund unterstützen). Es ist jedoch nützlich, diese Technik zu kennen, um zu überprüfen, ob eine API existiert, bevor Sie sie verwenden. Ich bevorzuge diese Technik als das Testen der Betriebssystemversion, weil Sie überprüfen, ob die spezifische API vorhanden ist, anstatt externe Kenntnisse darüber zu verwenden, welche APIs in welchen Betriebssystemversionen vorhanden sind.

+0

Dank für die schnelle Antwort! –

5

Wenn Sie eine UIApplicationDelegate implementieren, können Sie auch in Funktionen als Teil des Delegierten Haken:

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    /* 
    Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
If your application supports background execution, called instead of applicationWillTerminate: when the user quits. 
    */ 
    NSLog(@"Application moving to background"); 
} 


- (void)applicationWillEnterForeground:(UIApplication *)application { 
    /* 
    Called as part of the transition from the background to the active state: here you can undo many of the changes made on entering the background. 
    */ 
    NSLog(@"Application going active"); 
} 

Für die Protokollverweis siehe http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html