Pregunta

¿Podría alguien por favor me muestran cómo utilizar la propiedad objeto en NSNotifcationCenter. Quiero ser capaz de utilizarlo para pasar un valor entero a mi método de selección.

Esta es la forma en que he levantado el oyente notificación en mi interfaz de usuario de Vista. Ya que quiero un valor entero que se pasa No estoy seguro de qué reemplazarla con nula.

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


- (void)receiveEvent:(NSNotification *)notification {
    // handle event
    NSLog(@"got event %@", notification);
}

Me enviará la notificación de otra clase como esta. La función se pasa un índice variable llamada. Es este valor que quiero despedir de alguna manera con la notificación.

-(void) disptachFunction:(int) index
{
    int pass= (int)index;

    [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:pass];
    //[[NSNotificationCenter defaultCenter] postNotificationName:<#(NSString *)aName#>   object:<#(id)anObject#>
}
¿Fue útil?

Solución

El parámetro object representa el remitente de la notificación, que es generalmente self.

Si desea transmitir información adicional, es necesario utilizar el método NSNotificationCenter postNotificationName:object:userInfo:, que tiene un diccionario arbitrario de valores (que son libres de definir). Las necesidades contenidos a instancias NSObject reales, no un tipo integral como un entero, por lo que necesita para envolver los valores enteros con objetos NSNumber.

NSDictionary* dict = [NSDictionary dictionaryWithObject:
                         [NSNumber numberWithInt:index]
                      forKey:@"index"];

[[NSNotificationCenter defaultCenter] postNotificationName:@"myevent"
                                      object:self
                                      userInfo:dict];

Otros consejos

La propiedad object no es apropiado para ello. En vez que desee utilizar el parámetro userinfo:

+ (id)notificationWithName:(NSString *)aName 
                    object:(id)anObject 
                  userInfo:(NSDictionary *)userInfo

userInfo es, como se puede ver, una NSDictionary específicamente para el envío de información junto con la notificación.

Su método dispatchFunction el contrario, sería algo como esto:

- (void) disptachFunction:(int) index {
    NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"pass"];
   [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:nil userInfo:userInfo];
}

Su método receiveEvent sería algo como esto:

- (void)receiveEvent:(NSNotification *)notification {
    int pass = [[[notification userInfo] valueForKey:@"pass"] intValue];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top