2010-01-23 20 views
8

Estoy teniendo algunos problemas en mi notificación publicado:¿Métodos para solucionar problemas de NSNotificationCenter?

[[NSNotificationCenter defaultCenter] postNotificationName:@"MobileProviderChanged" 
                object:self.selectedProviderID]; 

no está siendo atrapado por mi observador:

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

El mismo observador exacta funciona correctamente en una ViewController diferente.

¿Alguna sugerencia sobre los métodos para depurar esto aún más para ver qué mensajes se publican realmente en el defaultCenter?

Gracias.

+0

Cuanto más investigo este problema, me pregunto si mi problema es que el controlador de vista de envío está en un subproceso diferente que el controlador de vista de observación. – CBGrey

+0

Hola Greypoint: el hilo que inicia la notificación no debería importar. Sin embargo, se llamará al método del observador en cualquier tema en el que se publique la notificación, por lo que debe tener cuidado con eso. Si tiene problemas para rastrear las notificaciones a través de su aplicación, debe consultar http://www.sparkinspector.com, que tiene una herramienta para controlarlas. –

Respuesta

1

Cuanto más investigo este problema que se preguntan si mi problema es que el envío de viewcontroller está en un hilo diferente que el viewcontroller observación.

El subprocesamiento incorrecto es casi con seguridad el origen de su problema. Sin embargo, las notificaciones aún deben enviarse y recibirse.

En concreto, se recibirá una notificación sobre el hilo al que se envió. Como mencionas que estás jugando con los controladores de vista en respuesta a la notificación, es bastante probable que estés haciendo algo en un hilo no principal por el que el UIKit no está contento.

+0

Gracias bbum. ¿Cómo puedo asegurarme de que mi controlador de vista de envío y el controlador de vista de observación (son padre/hijo a través del controlador de navegación) están en el mismo hilo? ¿O es posible que estén en diferentes hilos? – CBGrey

+0

La notificación siempre se manejará en el mismo hilo. Ese es el problema. Si los controladores de vista no son seguros para subprocesos, siempre deben enviarse mensajes en el subproceso principal y, por lo tanto, todas las notificaciones * deben * publicarse en el subproceso principal. – bbum

+0

Hm, dos cosas me hacen pensar que en realidad están en el mismo hilo ... Modifiqué mi notificación posterior para usar: "performSelectorOnMainThread" (forzándolo al hilo principal) pero aún no funciona. En segundo lugar, utilicé "Instrumentos" para rastrear la actividad del hilo y parece que ambos están en el hilo principal (si entiendo lo que veo). Frustrante. ¿Alguna forma de rastrear NSNotifications o de alguna manera validar que mi addObserver en realidad se ha agregado? – CBGrey

1

Tiene el mismo problema. La solución es bastante simple, pero no obvia:

Asegúrese de que el observador aún exista durante la entrega de NSNotification.

Cuestiones relacionadas