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?
Antwort
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
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.
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
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.
fügen Sie Beobachter in 'didFinishLaunchingWithOptions' hinzu? – Vvk
@Vvk Ja, ich habe es dort hinzugefügt – den330
Sie müssen Beobachter in 'ApplicationWillTerminate' Methode in AppDelegate entfernen – Vvk