मेरे पास एक व्यू कंट्रोलर है, चलिए इसे HomeViewController
कहते हैं, जो बिना किसी बटन के एक अलर्ट व्यू पॉप अप करता है जो कहता है "कृपया सर्वर से कनेक्ट होने के दौरान प्रतीक्षा करें"। प्रतीक्षा करते समय, व्यू कंट्रोलर किसी अन्य वर्ग (ServerConnection
) में एक विधि को कॉल करता है जो सर्वर को डेटा भेजता है।
मुझे एक सर्वर प्रतिक्रिया प्राप्त होने के बाद उस अलर्ट को रद्द करने की आवश्यकता है, लेकिन अगर मैं निम्न कार्य करता हूं तो यह काम नहीं करेगा:
HomeViewController *hvc = [[HomeViewController alloc] init];
[hvc waitAlertCancel];
//note:waitAlertCancel is a method that calls the following line of code:
[waitAlert dismissWithClickedButtonIndex:0 animated:TRUE];
उस अलर्ट दृश्य को किसी अन्य वर्ग से रद्द करने में सक्षम होने के लिए मुझे क्या करना चाहिए?
2 जवाब
ब्लॉक कमाल के हैं।
यदि आपको कोई घटना होने के बाद एक कक्षा में दूसरी कक्षा से कोड कॉल करने की आवश्यकता है, ब्लॉक सही समाधान हैं। ब्लॉक उपलब्ध होने से पहले, आप आम तौर पर एक प्रतिनिधि पैटर्न का उपयोग करके इस तरह के एक डिज़ाइन को संभालेंगे, जो ठीक है, लेकिन यह आपकी जैसी स्थितियों में भारी-भरकम हो सकता है जहां आपको केवल एक अलर्ट को खारिज करने की आवश्यकता होती है। तो, ब्लॉक का उपयोग करना एक बहुत साफ समाधान है, आईएमओ।
अपनी ServerConnection
कक्षा में एक विधि बनाएं जो कॉलबैक के लिए ब्लॉक का उपयोग करे। की तर्ज पर कुछ
- (void) connectWithCompletionBlock(void(^))completionBlock;
तब आप connectWithCompletionBlock:
विधि को इस प्रकार कॉल करेंगे:
[myServerConnection connectWithCompletionBlock: ^ { [waitAlert dismissWithClickedButtonIndex:0 animated:TRUE]; }];
एक बार जब ServerConnection
ऑब्जेक्ट को सर्वर प्रतिक्रिया प्राप्त हो जाती है, तो आप उसे पूर्णता ब्लॉक चलाने के लिए कह सकते हैं।
एनएसएनोटिफिकेशन का प्रयोग करें। सर्वर अनुरोध को संभालने वाली वस्तु एक अधिसूचना पोस्ट करें कि यह पूरा हो गया है। अपने होम व्यू कंट्रोलर से इसे सुनने और उसके अनुसार प्रतिक्रिया देने को कहें।