wie die Objekteigenschaft von NSNotificationCenter verwenden
-
29-09-2019 - |
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#>
}
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];
}