Könnte mir bitte jemand zeigen, wie man die Objekteigenschaft in NSNotifcationCenter verwendet. Ich möchte damit einen ganzzahligen Wert an meine Auswahlmethode übergeben können.
So habe ich den Benachrichtigungslistener in meiner UI-Ansicht eingerichtet. Da ich möchte, dass ein ganzzahliger Wert übergeben wird, bin ich mir nicht sicher, durch was Null ersetzt werden soll.
[[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 dieser. Der Funktion wird eine Variable namens index übergeben. Es ist dieser Wert, den ich mit der Benachrichtigung irgendwie auslösen möchte.
-(void) disptachFunction:(int) index
{
int pass= (int)index;
[[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:pass];
//[[NSNotificationCenter defaultCenter] postNotificationName:<#(NSString *)aName#> object:<#(id)anObject#>
}
quelle
Die
object
Eigenschaft ist dafür nicht geeignet. Stattdessen möchten Sie denuserinfo
Parameter verwenden:+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)userInfo
userInfo
Wie Sie sehen, handelt es sich um ein NSDictionary, das speziell zum Senden von Informationen zusammen mit der Benachrichtigung verwendet wird.Ihre
dispatchFunction
Methode wäre stattdessen ungefähr so:- (void) disptachFunction:(int) index { NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"pass"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:nil userInfo:userInfo]; }
Ihre
receiveEvent
Methode wäre ungefähr so:- (void)receiveEvent:(NSNotification *)notification { int pass = [[[notification userInfo] valueForKey:@"pass"] intValue]; }
quelle
self
wenn Sie es verwenden möchten ). Was passiert, wenn Sie dort etwas anderes platzieren? Ich habe keine Ahnung, aber wenn ich raten müsste, könnte es die Dinge unter dem Deckmantel durcheinander bringen, wie das Notification Center, das nachverfolgt, was veröffentlicht werden muss. Warum riskieren, wenn es ein System gibt, mit dem Objekte herumgereicht werden können?self
undnil
inobject:
.self
nicht in dem Objekt ist, zu dem er gehört, sondern in andere zufällige Daten.