Frage

Könnte jemand bitte zeigen Sie mir, wie die Objekteigenschaft auf NSNotifcationCenter verwenden. Ich möchte in der Lage sein, es zu benutzen einen ganzzahligen Wert meiner Wähler Methode zu übergeben.

Dies ist, wie ich die Benachrichtigungs-Listener in meiner UI-Ansicht einrichten. wie ich ein Integer-Wert übergeben werden soll da ich bin nicht sicher, was mit Null zu ersetzen.

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


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

Ich versende die Benachrichtigung von einer anderen Klasse wie diese. Die Funktion wird eine Variable mit dem Namen Index übergeben. Es ist dieser Wert, dass ich mag irgendwie mit der Benachrichtigung abfeuern.

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

    [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:pass];
    //[[NSNotificationCenter defaultCenter] postNotificationName:<#(NSString *)aName#>   object:<#(id)anObject#>
}
War es hilfreich?

Lösung

Der object Parameter stellt den Absender der Meldung, die in der Regel self.

Wenn Sie zusätzliche Informationen zu übergeben entlang, müssen Sie die NSNotificationCenter Methode postNotificationName:object:userInfo: verwenden, die eine beliebige Wörterbuch des Wertes annimmt (das sind Sie frei zu definieren). Der Inhalt Bedürfnisse tatsächliche NSObject Instanzen sein, nicht ein integraler Typ wie zum Beispiel einer ganzen Zahl ist, so dass Sie die Integer-Werte mit NSNumber Objekten wickeln müssen.

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

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

Andere Tipps

Die object Eigenschaft ist dafür nicht geeignet. Stattdessen möchten Sie die userinfo Parameter verwenden:

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

userInfo ist, wie Sie sehen können, eine NSDictionary speziell für Informationen zusammen mit der Mitteilung zu senden.

Ihre dispatchFunction Methode stattdessen so etwas wie dieses wäre:

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

Ihre receiveEvent Methode so etwas wie dieses wäre:

- (void)receiveEvent:(NSNotification *)notification {
    int pass = [[[notification userInfo] valueForKey:@"pass"] intValue];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top