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#>
}
È stato utile?

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];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top