Frage

Ich kann Beobachter zweimal (aus Versehen) zum Benachrichtigungscenter hinzufügen und erhalte zweimal Benachrichtigungen. Ist es möglich, nur eine Benachrichtigung zu erhalten?Kennen Sie elegantere Lösungen?

Ich zeige Ihnen dieses Beispiel, da dies zu Fehlern führen kann.

- (void)viewDidLoad 
{
 [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];
 [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];
}

- (void)keyboardDidShow:(NSNotification *)ntf
{
}

War es hilfreich?

Lösung

Wenn Sie nicht sicher sind, ob Sie den Beobachter an einer anderen Stelle hinzugefügt haben, können Sie bei jedem Hinzufügen eines Beobachters den folgenden Code verwenden.

[[NSNotificationCenter defaultCenter] removeObserver:self name:aName object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:aSelector name:aName object:nil];

Auf diese Weise entfernen Sie die alte (falls vorhanden) und fügen eine neue hinzu.

Es ist nicht 100% ausfallsicher, aber es ist ein Anfang.Dies kann in Multithread-Apps fehlschlagen, in denen die Anrufe asynchron oder in anderen einzigartigen Situationen getätigt werden.

Andere Tipps

Sie können ein Objekt auch auf Null setzen und dieses Objekt später so verwenden, als ob es noch gültig wäre.

Nicht alles kann ausfallsicher gemacht werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top