2009-02-05 15 views
6

मेरे पास एक ऐप है जो उपयोगकर्ता को शेड्यूल ऑब्जेक्ट्स के संग्रह को देखने, कुशल बनाने और प्रबंधित करने की अनुमति देता है। ऐप के विभिन्न हिस्सों को इस डेटा तक पहुंच की आवश्यकता है। मैंने संग्रह को सिंगलटन बनाने के साथ प्रयोग किया है, लेकिन मुझे यह बहुत साफ नहीं मिला।आप आईफोन ऐप में वैश्विक एप्लिकेशन डेटा कहां डालते हैं?

मैं हाल ही में AppDelegate कक्षा में वैश्विक डेटा भंडारण और उपयोग करने के लिए बदल दिया है:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.myGlobalData doSomething]; 

कौन सा जरूरत मेरी वैश्विक डेटा एक सिंगलटन होने के लिए समाप्त, लेकिन वास्तव में सिर्फ UIApplication सिंगलटन का लाभ लेने के लिए है।

वास्तव में सिर्फ एक प्राथमिक दृश्य नियंत्रक जहां यह समझ में आता है मेरे मामले में यह स्टोर करने के लिए नहीं है। तो मैं सोच रहा था कि लोग इसका समाधान करने के लिए किस तरह की रणनीतियां उपयोग करते हैं।

उत्तर

6

यदि आपके पास एक केंद्रीय डेटा मॉडल है जो एकाधिक नियंत्रकों के लिए सुलभ होने की आवश्यकता है, तो डेटा प्रबंधित करने के लिए सिंगलटन का उपयोग करने में कुछ भी गलत नहीं है - एक "साझा प्रबंधक" बिल्कुल परिदृश्य की मांग करता है। यह अनिवार्य रूप से ऐप्पल संपर्कों में हेरफेर करने के लिए उनके एड्रेस बुक एपीआई के साथ करता है। वे एक सी-स्टाइल एपीआई का उपयोग करते हैं, लेकिन इसमें साझा पता पुस्तिका डेटाबेस का संदर्भ प्राप्त करना और फिर भविष्य में कॉल में इसका उपयोग करना शामिल है।

एप्लिकेशन प्रतिनिधि का उपयोग करते हुए भी काम करता है, लेकिन जैसा कि आप ध्यान दें यह वास्तव में एक ही बात है। आप ऐप प्रतिनिधि सिंगलटन को डेटा मॉडल के मालिक के रूप में नामित कर रहे हैं, जो ठीक है।

NSUserDefaults इस तरह से दुर्व्यवहार किया जा सकता है लेकिन यह वास्तव में इसका उद्देश्य नहीं है। बदसूरत होने के अलावा, यह आपके द्वारा संग्रहीत डेटा के प्रकार पर भी प्रतिबंध लगाता है। आपका खुद का मॉडल आपके इच्छित डेटा को स्टोर कर सकता है, लेकिन NSUserDefaults काफी लचीला नहीं है।

SQLite या किसी प्रॉपर्टी सूची का उपयोग करना या किसी फ़ाइल में डेटा स्टोर करने के लिए जो भी इसे प्रबंधित करना है, उसके सवाल के लिए वास्तव में ऑर्थोगोनल है। आपके विवरण से एक सिंगलटन दृष्टिकोण उचित लगता है, और वह सिंगलटन फाइलों को लिख सकता है जो आप जिस डेटा के साथ काम कर रहे हैं उसके लिए समझ में आता है।

+0

यदि आप इसे कम करने के लिए प्रेरित हैं (जैसे किसी ने अभी किया है), तो कृपया उस तारीख को देखें जब यह लिखा गया था। उस समय, आईफोन ओएस 2.2 (आईओएस नहीं) चालू था और कोर डेटा iPhones पर उपलब्ध नहीं था। –

4

बहुत से लोग AppDelegate में सब कुछ की दुकान और [[UIApplication sharedApplication] प्रतिनिधि] के माध्यम से डेटा का उपयोग।

डेटा कायम किए जाने की अपेक्षा की जाती है, तो आप भी NSUserDefaults सिंगलटन इस्तेमाल कर सकते हैं।

डेटा बड़ा कर रहे हैं, हो सकता है आप SQLite की जरूरत है।

इस के रूप में आप से पूछा "वैश्विक" डेटा के लिए है।

यदि आपके व्यू कंट्रोलर पेड़ में व्यवस्थित होते हैं, तो बेहतर तरीका माता-पिता UIViewController से बच्चे UIViewController तक आवश्यक डेटा पास कर देगा।

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