2010-06-02 9 views
5

के प्रतिनिधि को बदलें, मैंने एमजीटीविटरइंजिन की एक विस्तारित कक्षा का उपयोग करके xAuth के माध्यम से सेटअप और सफलतापूर्वक लॉग इन किया है, मेरा सवाल यह है कि अगर मैं इसे किसी अन्य व्यू कंट्रोलर में पास करना चाहता हूं, तो मैं प्रतिनिधि वर्ग को कैसे बदल सकता हूं, क्योंकि यह कुछ है कमजोर संदर्भ की तरहएमजीटीविटरइंजिन

@interface MGTwitterEngine : NSObject <MGTwitterParserDelegate> { 
__weak NSObject <MGTwitterEngineDelegate> *_delegate; 

ऊपर हूँ मैं सबसे अच्छा रैप यह एक सिंगलटन वर्ग में और इस तरह से चारों ओर से पारित, overkill लगता है हर बार में प्रवेश करने के लिए, या मैं

चारों ओर इस वस्तु को बांटने का एक बड़ी मेहनत से स्पष्ट तरीका याद किया है

इस समय मैंने एमजीटीविटरइंजिन को एक सेट डिलीगेट विधि जोड़ा है लेकिन मुझे लगता है कि मैं ढांचे से लड़ रहा हूं अनावश्यक रूप से

+0

मुझे यह भी जवाब जानना अच्छा लगेगा। मैं आपको हर अनुरोध पर प्रतिनिधि निर्दिष्ट करने में सक्षम होना पसंद करता। – Camsoft

उत्तर

6

यदि आप इंजन को एकाधिक ऑब्जेक्ट्स में साझा कर रहे हैं तो आप इंजन को लपेटकर कुछ अन्य ऑब्जेक्ट/सिंगलटन रखना चाहते हैं और अपने एकमात्र प्रतिनिधि के रूप में कार्य करना चाहते हैं। यदि आपने डेटाबेस प्रोग्रामिंग किया है तो इसे डेटाबेस कनेक्शन की तरह सोचें - शायद आपके पास प्रत्येक व्यू कंट्रोलर का अपना डेटाबेस कनेक्शन नहीं होगा। इसके बजाय आप कुछ प्रकार के डेटा मैनेजर ऑब्जेक्ट बनाएंगे जो दृश्यों द्वारा साझा किया जाता है और संभावित रूप से कुछ डीबी आंतरिकों को हटा देता है।

यदि अलग-अलग दृश्य नियंत्रक विभिन्न कार्यों को प्रबंधित करते हैं - जैसे लॉगिन, उपयोगकर्ताओं को ढूंढना, संदेश पूछना आदि। तो आपके रैपर में प्रतिनिधि विधियां उचित दृश्य नियंत्रक के साथ प्रतिक्रियाओं को पारित करने में सक्षम होनी चाहिए।

यदि आपके पास एक ही तरीके से कॉल करने वाले अलग-अलग दृश्य नियंत्रक हैं (और यदि ऐसा है, क्यों?), तो आप अभी भी संबंधित दृश्य नियंत्रकों को प्रतिक्रियाओं को रूट कर सकते हैं। चूंकि एमजीटीविटरइंजिन डॉक्स कहते हैं, "प्रत्येक ट्विटर एपीआई विधि एक एनएसएसटींग लौटाती है जो उस कनेक्शन के लिए एक अद्वितीय पहचानकर्ता है।" आपको अपने ऑब्जेक्ट (आपके व्यू कंट्रोलर) या ब्लॉक को अपने प्रत्येक लिपटे तरीकों के लिए एक अतिरिक्त पैरामीटर के रूप में पास करने की आवश्यकता होगी। जब आप अपना रैपर प्रतिक्रिया भेजता है तो आप ट्विटर आईडी स्ट्रिंग और इस ऑब्जेक्ट/ब्लॉक को एक म्यूटेबल डिक्शनरी में कैश कर सकते हैं, फिर प्रतिक्रिया को संभालने का समय होने पर कैश में कनेक्शन आईडी देखें।

+1

मैं साथ सोचने लगा उन पंक्तियों। एमजीटीविटरइंजिन के लिए एक प्रतिनिधि होने के लिए यह पूरी तरह से समझ में आता है और परिणाम को सही दृश्य/दृश्य नियंत्रक के पास वापस ले जाता है। आपको बहुत - बहुत धन्यवाद! – Camsoft

+0

मैं उसी निष्कर्ष पर आया जब मैं पिछले साल एक छोटी परियोजना पर काम कर रहा था। मैंने एक सदस्यता लेने के लिए समाप्त किया: (आईडी) लक्ष्य को संदर्भित करें: (एनएसएसटींग) कनेक्शन आईडी 'विधि जो सदस्यता को स्टोर करने के लिए एनएसएमयूटेबल डिक्शनरी का उपयोग करती है। एक बार जब प्रतिनिधि को परिणाम प्राप्त होते हैं, तो यह लक्ष्य को देखता है, आगे डेटा को नियंत्रक में एक ही हस्ताक्षर के साथ एक विधि के लिए, और सदस्यता हटा देता है। – freeatnet

2

असल में, आप कर सकते हैं। प्रतिनिधि, एमजीटीविटरइंजिन में एक चर के अलावा कुछ भी नहीं है। उचित शीर्षलेख और कार्यान्वयन कॉल जोड़कर अगले दृश्य नियंत्रक में बस इसका एक उदाहरण जोड़ें। नया दृश्य नियंत्रक सेट instatiating के बाद:

nextViewController._mgTwitterEngine = self.mgTwitterEngine; 
nextViewController.mgTwitterEngine.delegate=nextViewController; 

तो nextViewController कहते हैं। प्रतिनिधि वापस मूल दृश्य नियंत्रक करने के लिए सेट करने के लिए भूल जाते हैं जब आप इसे करने के लिए वापस

आशा है कि मदद करता है ... बेस्ट ऑफ लक (या तो viewDidAppear या viewWillAppear पर) मत करो!

+0

बस सोच रहा है कि यह कैसे काम करेगा यदि ऐप ने एक ही ट्विटर इंजन ऑब्जेक्ट का उपयोग करके विभिन्न नियंत्रकों से एक ही समय में कुछ एसिंक्रोनस ट्विटर अनुरोध किए हैं। अनिवार्य रूप से मैं उन अनुरोधों को देख सकता हूं जो सभी पंजीकृत प्रतिनिधि को वापस आते थे। वास्तव में अनुरोध के माध्यम से भेजा जाना चाहिए? – Camsoft

+0

प्रतिक्रिया अंतिम पंजीकृत प्रतिनिधि को वापस आ जाएगी ...या तो आपको mgTwitterEngine का उपयोग करने वाले प्रत्येक वर्ग में इसका इलाज करना होगा, या आप सिंगलटन विधि का उपयोग कर सकते हैं, एर भी एक सिंगलटन का उपयोग करने का प्रयास करें जो केवल सूचना केंद्र के माध्यम से उत्तरों का इलाज करता है ... – Marsson

0

प्रतिनिधि में एनएसएनोटिफिकेशन का उपयोग करें।

व्यू कंट्रोलर बनाएं जहां आप प्रतिनिधि को पर्यवेक्षक जोड़ना चाहते हैं। अधिसूचना पोस्ट के बाद एमजीटीविटरइंजिन के लिए प्रतिनिधि विधि है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^