iphone objective-c cocoa nsnotificationcenter

iphone - cómo usar la propiedad del objeto de NSNotificationcenter



objective-c cocoa (2)

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

Si desea pasar información adicional, debe utilizar el método postNotificationName:object:userInfo: , que toma un diccionario arbitrario de valores (que puede definir libremente). El contenido debe ser instancias de NSObject reales, no un tipo integral como un entero, por lo que debe envolver los valores enteros con objetos NSNumber .

NSDictionary* dict = [NSDictionary dictionaryWithObject: [NSNumber numberWithInt:index] forKey:@"index"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:self userInfo:dict];

¿Podría alguien mostrarme cómo usar la propiedad del objeto en NSNotifcationCenter? Quiero poder usarlo para pasar un valor entero a mi método selector.

Así es como configuré el detector de notificaciones en mi UI View. Al ver que quiero que se pase un valor entero, no estoy seguro de con qué reemplazarlo.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"myevent" object:nil]; - (void)receiveEvent:(NSNotification *)notification { // handle event NSLog(@"got event %@", notification); }

Envío la notificación de otra clase como esta. La función se pasa una variable llamada índice. Es este valor el que quiero de alguna manera disparar 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#> }


La propiedad del object no es apropiada para eso. En su lugar, desea utilizar el parámetro userinfo :

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

userInfo es, como puede ver, un NSDictionary específicamente para enviar información junto con la notificación.

Su método de dispatchFunction 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]; }