2012-05-18 10 views
9

aggiungo questa funzione per inviare una notifica quando l'applicazione entra in primo piano:iOS applicationWillEnterForeground e stucked per un po '

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName: @"UIApplicationWillEnterForegroundNotification" object: nil]; 
} 

Nella mia classe:

- (void) handleEnterForeground: (NSNotification*) sender 
{ 
    [self reloadTableData]; 
} 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(handleEnterForeground:) 
              name: @"UIApplicationWillEnterForegroundNotification" 
              object: nil]; 
} 

ma la handleEnterForeground: function chiamerà due volte, non so perché. IlreloadTableData: la funzione chiamerà webService remoto, quindi quando l'app entrerà in primo piano , verrà bloccato per un po '. Pls mi aiuta con questo, e grazie.

risposta

17

Il sistema chiamerà quell'evento automaticamente. La ragione per cui spara due volte è perché la rilanci manualmente di nuovo.

P.S. È preferibile utilizzare il nome della variabile UIApplicationWillEnterForeground anziché un letterale NSString.

EDIT: Mi rendo conto ora che la confusione viene dal fatto che non si sapeva che questo nome fosse già stato preso. Come nota ad altre persone che si imbattono in questo tipo di problema, è buona prassi anteporre i nomi degli eventi al prefisso del progetto (ad esempio XYZEventNotification) per evitare collisioni.

+0

dove sta sparando due volte? – cnu

+0

Sono così sicuro che ho chiamato quella funzione una volta. – jxdwinter

+1

@cnu * he * lo spara una volta e il runtime iOS lo spara una volta. Questo evento viene chiamato automaticamente. – borrrden