Pregunta

Esta no es tanto una pregunta como un pensamiento reflexivo: ¿por qué NSNotificationCenter lanza una excepción cuando se lanza? Todavía soy nuevo en el desarrollo de iPhone y, por lo tanto, todavía no conozco las entrañas de Cocoa, por lo que sería bueno entender por qué.

Estoy asignando el Centerer predeterminado a una variable, llamando addobserver: selector: nombre: objeto y luego liberar la variable anterior, pero la llamada a notificar la versión bloquea la aplicación. No estoy haciendo nada extraño en el código, por lo que sería interesante saber exactamente por qué está haciendo esto.

¿Alguien se encontró con este problema?

¿Fue útil?

Solución

Por lo que sé de nsnotifcation, no debería asignar el Centerer predeterminado a una variable, sino hacer algo como:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLogin) name:@"IncorrectLogin" object:nil];

En ese fragmento de llamar al centro predeterminado y registrar el objeto actual para un determinado mensaje.

Y luego para publicar un mensaje en el centro de notificaciones que puede usar:

[[NSNotificationCenter defaultCenter] postNotificationName:@"IncorrectLogin" object:nil];

Utilizo lo anterior en todo mi código y no tengo ningún problema con él.

Otros consejos

Solo debe haber un centro de notificación predeterminado para su aplicación, por lo que ninguna de sus clases debe retenerlo o liberarlo. No querrías que tu centro de notificación desaparezca en ti, ¿verdad?

No creo que sea dueño del objeto y, por lo tanto, no deba liberarlo.

Recuerde el Narc: Nuevo asignado, retener, copiar. Si haces uno de estos, tienes que liberarlo.

No es tuyo para lanzar.

Recuerde la regla de narcótica: solo libera cosas que trajiste existir:

Nuevo asignación de retención o copia.

TRAFICANTE DE DROGAS. ¿Ver?

Lo que está haciendo con NSNotificationCenter es obtener una copia del Singleton que representa el centro de notificación predeterminado. Vale la pena leer en singletons.

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