2016-07-11 28 views
0

Mein NSNotification Observer ist nicht nur für eine bestimmte Ansicht oder View-Controller. Ich möchte, dass es nur entfernt wird, wenn Benutzer die App schließen. Ich habe den "Beobachter hinzufügen" in AppDelegate eingefügt. Muss ich es noch manuell entfernen oder wird es automatisch entfernt, wenn die App geschlossen wird?Muss ich den Beobachter manuell entfernen, wenn er für die gesamte Lebensdauer der App verfügbar sein soll?

+0

fügen Sie Beobachter in 'didFinishLaunchingWithOptions' hinzu? – Vvk

+0

@Vvk Ja, ich habe es dort hinzugefügt – den330

+0

Sie müssen Beobachter in 'ApplicationWillTerminate' Methode in AppDelegate entfernen – Vvk

Antwort

2

Wenn Sie eine Benachrichtigung für bestimmte View-Controller wollen, dann bitte add observer zu, dass bestimmte Klassen und remove observer in viewDidDisappear hinzuzufügen. Ae hat Ihren Fall gesehen, jetzt haben Sie add observer in app delegate hinzugefügt, dann können Sie es in den unten Methoden entsprechend Ihren Anforderungen entfernen.

- (void)applicationWillResignActive:(UIApplication *)application 
- (void)applicationDidEnterBackground:(UIApplication *)application 
- (void)applicationWillTerminate:(UIApplication *)application 
1

Wenn die App also einen Methodenaufruf beenden ist dann

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    // Called when the application is about to terminate. Save data if appropriate. 
} 

Sie den Beobachter entfernen:

oder Sie cal entfernen Sie den Beobachter hier:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 

} 

Wenn Anwendung kommen Hintergrund.

1

Ich denke, Sie Ihren Code in

deinit{ 
    //remove observer here 
} 

hinzufügen obigen Verfahren in AppDelegate Klasse schreiben sollen.

Hoffe, das wird Ihnen helfen. Dank

1

Versuchen Sie, diese

Sie in didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(<#your selector#>) 
               name:@"TestNotification" 
               object:nil]; 

    return YES; 
} 

dann Beobachter in applicationWillTerminate entfernen addObserver haben. Sie müssen nicht Beobachter in anderen Methoden entfernen, weil viele app zum Hintergrund gehen und didFinishLaunchingWithOptions die ganze Zeit nicht anrufen. so müssen Sie nur in applicationWillTerminate entfernen.

- (void)applicationWillTerminate:(UIApplication *)application { 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 

    // If you don't remove yourself as an observer, the Notification Center 
    // will continue to try and send notification objects to the deallocated 
    // object. 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

hoffe es hilft dir.