el uso de la propiedad del objeto de NSNotificationCenter
-
29-09-2019 - |
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#>
}
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];
}