2011-02-02 13 views
10

Estoy desarrollando un lector de libros electrónicos y me he encontrado con el siguiente problema. Estoy usando un método IBAction para publicar una NSNotification que inturn invoca un método de acción una vez que se toca un botón. Está funcionando absolutamente bien por primera vez ... El método IBAction debe llamarse evry time toco el botón. Después de completar esta acción, necesito ir a mi página de inicio y luego regresar y hacer clic en el botón otra vez. Aquí es donde estoy enfrentando el problema. El método se está llamado más de una vez desde el segundo tiempo y el número sigue aumentando solamente .. Por favor, ayúdame con esto ....NSNotification se plantea varias veces

//IBAction Method 
if (sender.tag == PenToolAction) { 

    GLogInfo(@"Pen tool tapped"); 
    [self hideSelf]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:PenToolActionInitialized object:nil]; 
} 
+0

Donde puso el '[[NSNotificationCenter defaultCenter] addObserver :. ..] 'llamada? – Jilouc

+0

lo puse en el método ViewDidLoad de la clase de receptores. –

Respuesta

35

si se agrega el observador de notificación en un método llamado varias veces, recibirá la notificación varias veces también.

Intente poner el [[NSNotificationCenter defaultCenter] addObserver:...] en el método init en su lugar o llame al [[NSNotificationCenter defaultCenter] removeObserver:self] justo antes.

+2

Perfecto gracias! – Elmo

+0

¡Gracias Jilouc! –

+0

Ojalá Apple lo documentara mejor. Y desearía que hubiera una mejor API pública para poder determinar si un objeto ya se ha registrado en una notificación determinada. – LightningStryk

1

Muchas gracias por su apoyo ... Encontré la solución para mi pregunta ... El principal culpable aquí en mi código es el problema de la administración de la memoria ... He utilizado el analizador de código x para verificar la fugas y descubrí que olvidé liberar una variable principal ..... He liberado la variable y ahora mi código está funcionando bien ...

Cuestiones relacionadas