iOS
NSNotificationCenter
खोज…
परिचय
iOS सूचनाएं डेटा को शिथिल तरीके से भेजने का एक सरल और शक्तिशाली तरीका है। अर्थात्, किसी अधिसूचना के प्रेषक को इस बात की परवाह नहीं है कि (यदि कोई भी) अधिसूचना प्राप्त करता है, तो वह इसे बाकी ऐप पर पोस्ट करता है और इसे बहुत सारी चीजों या कुछ भी नहीं के आधार पर उठाया जा सकता है। आपके ऐप की स्थिति।
स्रोत : - स्विफ्ट के साथ हैकिंग
पैरामीटर
पैरामीटर | विवरण |
---|---|
नाम | अधिसूचना का नाम जिसके लिए पर्यवेक्षक को पंजीकृत करना है; अर्थात्, इस नाम के साथ केवल सूचनाएँ ब्लॉक को ऑपरेशन कतार में जोड़ने के लिए उपयोग की जाती हैं। यदि आप शून्य से गुजरते हैं, तो अधिसूचना केंद्र ऑपरेशन ब्लॉक में ब्लॉक को जोड़ने के लिए एक अधिसूचना के नाम का उपयोग नहीं करता है। |
obj | वह वस्तु जिसकी सूचना पर्यवेक्षक प्राप्त करना चाहता है; अर्थात्, इस प्रेषक द्वारा भेजे गए केवल नोटिफिकेशन को पर्यवेक्षक तक पहुंचाया जाता है। यदि आप nil पास करते हैं, तो सूचना केंद्र यह देखने के लिए कि क्या इसे प्रेक्षक को वितरित करना है, अधिसूचना के प्रेषक का उपयोग नहीं करता है। |
पंक्ति | किस कतार में ऑपरेशन कतार को जोड़ा जाना चाहिए। यदि आप शून्य से गुजरते हैं, तो ब्लॉक को पोस्टिंग थ्रेड पर सिंक्रोनाइज़ किया जाता है। |
खंड मैथा | अधिसूचना प्राप्त होने पर निष्पादित किया जाने वाला ब्लॉक। पर्यवेक्षक पंजीकरण हटाने तक ब्लॉक को अधिसूचना केंद्र और (प्रतिलिपि) द्वारा कॉपी किया जाता है। |
टिप्पणियों
एक NSNotificationCenter ऑब्जेक्ट (या बस, अधिसूचना केंद्र) एक कार्यक्रम के भीतर सूचना प्रसारित करने के लिए एक तंत्र प्रदान करता है। एक NSNotificationCenter ऑब्जेक्ट अनिवार्य रूप से एक सूचना प्रेषण तालिका है।
अधिक जानकारी के लिए, यहां Apple दस्तावेज़ीकरण देखें
एक पर्यवेक्षक जोड़ना
नामकरण परंपरा
नोटिफिकेशन की पहचान ग्लोबल NSString ऑब्जेक्ट्स से की जाती है जिनके नाम इस तरह से तैयार किए जाते हैं:
Name of associated class
+ Did | Will
+ UniquePartOfName
+ Notification
उदाहरण के लिए:
- NSApplicationDidBecomeActiveNotification
- NSWindowDidMiniaturizeNotification
- NSTextViewDidChangeSelectionNotification
- NSColorPanelColorDidChangeNotification
स्विफ्ट 2.3
NSNotificationCenter.defaultCenter().addObserver(self,
selector: #selector(self.testNotification(_:)),
name: "TestNotification",
object: nil)
स्विफ्ट 3
NSNotificationCenter.default.addObserver(self,
selector: #selector(self.testNotification(_:)),
name: NSNotification.Name(rawValue: "TestNotification"),
object: nil)
उद्देश्य सी
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(testNotification:)
name:@"TestNotification"
object:nil];
पुनश्च: यह भी ध्यान देने योग्य है कि एक पर्यवेक्षक को जितनी बार जोड़ा गया है, उतने बार पर्यवेक्षक को हटाना होगा। एकदम शुरुआत में गलती में पर्यवेक्षक को जोड़ने के लिए है viewWillAppear:
एक UIViewController, लेकिन में पर्यवेक्षक को दूर करने के viewDidUnload:
, धक्का की एक असमान संख्या का कारण होगा और इस तरह लीक पर्यवेक्षक और अधिसूचना चयनकर्ता एक ज़रूरत से ज़्यादा तरीके से बुलाया जा रहा है।
प्रेक्षकों को हटा रहा है
स्विफ्ट 2.3
//Remove observer for single notification
NSNotificationCenter.defaultCenter().removeObserver(self, name: "TestNotification", object: nil)
//Remove observer for all notifications
NotificationCenter.defaultCenter().removeObserver(self)
स्विफ्ट 3
//Remove observer for single notification
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "TestNotification"), object: nil)
//Remove observer for all notifications
NotificationCenter.default.removeObserver(self)
उद्देश्य सी
//Remove observer for single notification
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"TestNotification" object:nil];
//Remove observer for all notifications
[[NSNotificationCenter defaultCenter] removeObserver:self];
एक अधिसूचना पोस्ट करना
तीव्र
NSNotificationCenter.defaultCenter().postNotificationName("TestNotification", object: self)
उद्देश्य सी
[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:nil];
डेटा के साथ एक अधिसूचना पोस्ट करना
तीव्र
let userInfo: [String: AnyObject] = ["someKey": myObject]
NSNotificationCenter.defaultCenter().postNotificationName("TestNotification", object: self, userInfo: userInfo)
उद्देश्य सी
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:myObject forKey:@"someKey"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"TestNotification" object:nil userInfo:userInfo];
एक अधिसूचना का अवलोकन
तीव्र
func testNotification(notification: NSNotification) {
let userInfo = notification.userInfo
let myObject: MyObject = userInfo["someKey"]
}
उद्देश्य सी
- (void)testNotification:(NSNotification *)notification {
NSDictionary *userInfo = notification.userInfo;
MyObject *myObject = [userInfo objectForKey:@"someKey"];
}
ब्लॉक के साथ एक ऑब्जर्वर जोड़ना / निकालना
एक चयनकर्ता के साथ एक पर्यवेक्षक जोड़ने के बजाय, एक ब्लॉक का उपयोग किया जा सकता है:
id testObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"TestNotification"
object:nil
queue:nil
usingBlock:^(NSNotification* notification) {
NSDictionary *userInfo = notification.userInfo;
MyObject *myObject = [userInfo objectForKey:@"someKey"];
}];
पर्यवेक्षक को तब हटाया जा सकता है:
[[NSNotificationCenter defaultCenter] removeObserver:testObserver
name:@"TestNotification"
object:nil];
नाम के लिए पर्यवेक्षक जोड़ें और निकालें
// Add observer
let observer = NSNotificationCenter.defaultCenter().addObserverForName("nameOfTheNotification", object: nil, queue: nil) { (notification) in
// Do operations with the notification in this block
}
// Remove observer
NSNotificationCenter.defaultCenter().removeObserver(observer)