2010-10-04 9 views
26

Jak wykryć, że aplikacja właśnie wróciła z "trybu tła"? Chodzi mi o to, że nie chcę, aby moja aplikacja pobierała dane (co 60 sekund), gdy użytkownik kliknął "przycisk strony głównej". Ale chciałbym wprowadzić "specjalną" aktualizację za pierwszym razem, gdy aplikacja jest w trybie pierwszoplanowym.iphone 4 sdk: Wykryj powrót z trybu tła

jaki sposób można wykryć te dwa wydarzenia:

  1. aplikacja będzie tryb tła
  2. aplikacja będzie trybie planie

góry dziękuję.

François

Odpowiedz

48

Oto jak słuchać takich zdarzeń:

// 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]; 
} 

Uwaga: W if(&SomeSymbol) sprawdza upewnić się, że kod będzie działać na systemie iOS 4.0+ a także na iOS 3.x - jeśli budować przeciwko SDK iOS 4.x lub 5.x i ustawić docelową lokalizację wdrożenia na iOS 3.x Twoja aplikacja może nadal działać na urządzeniach 3.x, ale adres odpowiednich symboli będzie zerowy, a zatem nie będzie próbował zapytać dla powiadomień, które nie istnieją na urządzeniach 3.x (co spowodowałoby awarię aplikacji).

Aktualizacja: W tym przypadku if(&Symbol) kontrole są obecnie zbędne (chyba naprawdę trzeba wspierać iOS 3 dla jakiegoś powodu). Warto jednak poznać tę technikę, aby sprawdzić, czy API istnieje przed jego użyciem. Wolę tę technikę niż testowanie wersji systemu operacyjnego, ponieważ sprawdzasz, czy konkretny interfejs API jest obecny, zamiast używać zewnętrznej wiedzy o tym, jakie API są obecne w wersjach systemu operacyjnego.

+0

dzięki za szybką odpowiedź! –

5

Jeśli wdrożenie UIApplicationDelegate można również podpiąć do funkcji w ramach delegata:

- (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"); 
} 

na odniesienie protokół zob http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html