come utilizzare la proprietà oggetto di NSNotificationCenter
-
29-09-2019 - |
Domanda
Potrebbe qualcuno si prega di mostrarmi come utilizzare la proprietà dell'oggetto su NSNotifcationCenter. Voglio essere in grado di usarlo per passare un valore intero per il mio metodo di selezione.
Questo è il modo che ho impostato l'ascoltatore di notifica nel mio UI View. Vedendo come voglio un valore intero per essere passato io non sono sicuro di quello di sostituire nullo con.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"myevent" object:nil];
- (void)receiveEvent:(NSNotification *)notification {
// handle event
NSLog(@"got event %@", notification);
}
I le spedizioni della notifica da un'altra classe come questo. La funzione viene passato un indice variabile chiamata. E 'questo il valore che voglio sparare qualche modo fuori con la notifica.
-(void) disptachFunction:(int) index
{
int pass= (int)index;
[[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:pass];
//[[NSNotificationCenter defaultCenter] postNotificationName:<#(NSString *)aName#> object:<#(id)anObject#>
}
Soluzione
Il parametro object
rappresenta il mittente della notifica, che di solito è self
.
Se si desidera passare lungo informazioni supplementari, è necessario utilizzare il metodo NSNotificationCenter
postNotificationName:object:userInfo:
, che prende un dizionario arbitrario di valori (che si è liberi di definire). Le esigenze contenuti da istanze NSObject
reali, non un tipo integrale, come un intero, quindi è necessario avvolgere i valori interi con gli oggetti NSNumber
.
NSDictionary* dict = [NSDictionary dictionaryWithObject:
[NSNumber numberWithInt:index]
forKey:@"index"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myevent"
object:self
userInfo:dict];
Altri suggerimenti
La proprietà object
non è appropriato per questo. Invece si desidera utilizzare il parametro userinfo
:
+ (id)notificationWithName:(NSString *)aName
object:(id)anObject
userInfo:(NSDictionary *)userInfo
userInfo
è, come si può vedere, un NSDictionary specificamente per l'invio di informazioni insieme con la notifica.
Il tuo metodo dispatchFunction
sarebbe invece qualcosa di simile:
- (void) disptachFunction:(int) index {
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"pass"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:nil userInfo:userInfo];
}
Il tuo metodo receiveEvent
sarebbe qualcosa di simile a questo:
- (void)receiveEvent:(NSNotification *)notification {
int pass = [[[notification userInfo] valueForKey:@"pass"] intValue];
}