मेरे पास एक व्यू कंट्रोलर है, चलिए इसे 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];

उस अलर्ट दृश्य को किसी अन्य वर्ग से रद्द करने में सक्षम होने के लिए मुझे क्या करना चाहिए?

1
Baub 23 अगस्त 2011, 20:06

2 जवाब

सबसे बढ़िया उत्तर

ब्लॉक कमाल के हैं।


यदि आपको कोई घटना होने के बाद एक कक्षा में दूसरी कक्षा से कोड कॉल करने की आवश्यकता है, ब्लॉक सही समाधान हैं। ब्लॉक उपलब्ध होने से पहले, आप आम तौर पर एक प्रतिनिधि पैटर्न का उपयोग करके इस तरह के एक डिज़ाइन को संभालेंगे, जो ठीक है, लेकिन यह आपकी जैसी स्थितियों में भारी-भरकम हो सकता है जहां आपको केवल एक अलर्ट को खारिज करने की आवश्यकता होती है। तो, ब्लॉक का उपयोग करना एक बहुत साफ समाधान है, आईएमओ।

अपनी ServerConnection कक्षा में एक विधि बनाएं जो कॉलबैक के लिए ब्लॉक का उपयोग करे। की तर्ज पर कुछ

- (void) connectWithCompletionBlock(void(^))completionBlock;

तब आप connectWithCompletionBlock: विधि को इस प्रकार कॉल करेंगे:

[myServerConnection connectWithCompletionBlock: ^ { [waitAlert dismissWithClickedButtonIndex:0 animated:TRUE]; }];

एक बार जब ServerConnection ऑब्जेक्ट को सर्वर प्रतिक्रिया प्राप्त हो जाती है, तो आप उसे पूर्णता ब्लॉक चलाने के लिए कह सकते हैं।

3
memmons 24 अगस्त 2011, 20:53
दुर्भाग्य से, अलर्ट व्यू का उपयोग करना मेरा निर्णय नहीं है। मैंने उन्हें कई बार समझाया है कि ऐसा करने के अन्य तरीके भी हैं लेकिन वे एप्लिकेशन के एंड्रॉइड संस्करण को कॉपी करने की कोशिश कर रहे हैं जो एक प्रगति संकेतक के साथ अलर्ट व्यू को पॉप अप करता है। (ठीक वैसे ही जैसे यह करता है।)
 – 
Baub
23 अगस्त 2011, 20:27
1
क्षमा करें, मैंने आपके प्रश्न के सार को गलत समझा। मैंने जवाब संपादित कर लिया है।
 – 
memmons
23 अगस्त 2011, 21:09

एनएसएनोटिफिकेशन का प्रयोग करें। सर्वर अनुरोध को संभालने वाली वस्तु एक अधिसूचना पोस्ट करें कि यह पूरा हो गया है। अपने होम व्यू कंट्रोलर से इसे सुनने और उसके अनुसार प्रतिक्रिया देने को कहें।

0
Dancreek 23 अगस्त 2011, 22:58