2016-04-13 7 views
-1
[[NSNotificationCenter defaultCenter] postNotificationName:@"TapNewProduct" object:self.productID]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tapNewProduct:) name:@"TapNewProduct" object:nil]; 
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"TapNewProduct" object:nil]; 

Was ist der Unterschied zwischen den drei Abschnitten des Codes innerhalb des "Objekts"?NSNotificationCenter in iOS

Antwort

0

Hinzufügen des Observer:

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

Sie der Beobachter in den "für die Dinge zu hören". Die Aussage oben sagt: „Wenn Sie eine TapNewProduct Meldung hören, dann die Methode execute (Selektor) tapNewProduct

Mitteilungen an die Observer Posting:.

// This can be on a different viewController or the same viewController the 
// observer lives 
[[NSNotificationCenter defaultCenter] postNotificationName:@"TapNewProduct" object:self.productID]; 

Sie eine Benachrichtigung hinterlassen würde, wenn Sie wollen die tapNewProduct Methode (Selektor) auszuführen

den Observer Entfernen.

Diese Zeile sendet die Benachrichtigung. Sie hätten dies wahrscheinlich in didSelectRowAtIndexPath, einem UIButton oder einem UICollectionView.

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"TapNewProduct" object:nil]; 

würde diese Linie in dealloc der UIViewController gehen, wo Sie den Beobachter hinzugefügt. Wenn die Zuweisung aufgehoben wird, wird der Beobachter entfernt.

Schritte:

1) hinzufügen den Betrachter ersten.

2) DANN du post die Benachrichtigung, die der Beobachter aufnimmt und führt dann den Selektor aus, den Sie beim Hinzufügen des Beobachters angegeben haben.

3) Wenn Sie die Klasse freigeben, wo Sie den Beobachter ursprünglich hinzugefügt, Sie den Betrachter entfernen (es in dealloc, setzen nichtviewDidDisappear).

Sehen Sie diese Antwort für eine ausführlichere Erklärung:

https://stackoverflow.com/a/2191802/4475605

+0

[[NSNotificationCenter defaultCenter] postNotificationName: @ "TapNewProduct" object: self.productID]; // NSDictionary * dict = @ {@ "productID": self.productID}; // [[NSNotificationCenter defaultCenter] postNotificationName: @ "TapNewProduct" objekt: nil userInfo: dict]; Die zwei Methoden, die besser ist –

0

Diese „Objekt“ s in die drei Abschnitte sind die gleichen: Die Aufgabe der Benachrichtigung erfolgt.

[[NSNotificationCenter defaultCenter] postNotificationName:@"TapNewProduct" object:self.productID]; 

Dieses "Objekt" ist das Objekt, die Benachrichtigung erfolgt.

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

Wenn das „Objekt“ gesetzt ist, wird der Beobachter response nur die Mitteilung, wenn die Objekt Mitteilung ist das „Objekt“

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"TapNewProduct" object:nil]; 

Genau wie die oben, entfernen Sie nur den Beobachter, deren Gegenstand das „Objekt“

In einem Wort, das „Objekt“ ist Benachrichtigung Absender, die Zwischenzeit, wenn festgelegt wird, bedeutet ein weiteres Kriterium

Verwandte Themen