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
{
}
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top