NSNotificationCenter puede generar errores.¿Conoces soluciones más elegantes?
-
27-10-2019 - |
Pregunta
Puedo agregar observador dos veces (por accidente) al centro de notificaciones y recibiré notificaciones dos veces. ¿Es posible recibir solo una notificación?¿Conoces soluciones más elegantes?
Te muestro este ejemplo porque esto puede dar lugar a errores.
- (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
{
}
Solución
Si no está seguro de haber agregado el observador en otro lugar, puede usar el siguiente código cada vez que agregue un observador
[[NSNotificationCenter defaultCenter] removeObserver:self name:aName object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:aSelector name:aName object:nil];
De esta manera, está eliminando el anterior (si existía) y agregando uno nuevo.
No es 100% a prueba de fallas, pero es un comienzo.Esto podría fallar en aplicaciones de subprocesos múltiples donde las llamadas se realizan de forma asíncrona u otras situaciones únicas.
Otros consejos
También puede establecer un objeto en cero y luego usar ese objeto como si aún fuera válido.
No todo se puede hacer a prueba de fallas.