2011-07-15 23 views
13

मैं एक UITableView से निपटने के लिए एक NSFetchedResultsController का उपयोग कर रहा हूं और सब कुछ ठीक काम करता है और मुझे यह बहुत शक्तिशाली लगता है, खासकर परिणाम प्रतिनिधि के साथ। तालिका को ड्रिल करने के लिए मैं उसी नियंत्रक वर्ग का पुन: उपयोग कर रहा हूं, जो सेल पंक्ति पर क्लिक करके पैरामीटर के साथ तत्काल हो जाता है, नियंत्रक को फिर UINavigationController पर धक्का दिया जाता है और एक अन्य तालिका दृश्य, फिर से NSFetchedResultsController के साथ बनाया जाता है।NSFetchedResultsController कैश का सही उपयोग

इस बिंदु पर, प्रत्येक नियंत्रक का अपना कैश होता है, और कैश नाम एक अद्वितीय पहचानकर्ता [एनएसएसटींग स्ट्रिंगविथफॉर्मैट "कैशनाम _% @", अद्वितीय स्ट्रिंगफॉरसेल] के साथ लिया जाता है, और अंत में मैं स्पष्ट रूप से कई कैश कर सकता हूं।

अब प्रश्न।

1) कई कैश होने से समस्या हो सकती है?

2) हमें कैश का उपयोग कब करना चाहिए?

3) deleteCacheWithName के मामले में, ऐसी विधि रखने के लिए सबसे अच्छी जगह कहां है? मैंने दृश्य में कोशिश की है, लेकिन इसके साथ मुझे लगता है कि दृश्य फिर से दिखाई देगा जब कैश फिर से दिखाई देगा और कैश अब मौजूद नहीं है, उदाहरण के लिए जब UINavigationController के साथ उपयोग करना है। शायद dealloc विधि सबसे अच्छी जगह है?

4) कैश और मेमोरी प्रबंधन के बीच संबंध क्या है? मेरा मतलब है, जब एक (शून्य) किया गया ReceiveMemory चेतावनी भेजा जाता है क्या मुझे कैश को हटाने की जरूरत है? यदि हां, तो इसे फिर से पुनर्निर्माण के बारे में क्या? पसंदीदा तरीका क्या है, शायद fetch जारी कर रहे हैं?

5) fetch नियंत्रक के प्रतिनिधि को UITableViewController (fetchController.delegate = self) पर सेट किया गया है, क्या इसमें कोई समस्या है? एक अर्थ में कि एक से अधिक नियंत्रकों को बदलने के मामले में सतर्क किया जाता है? और हटा देता है कैशविथनाम प्रतिनिधि को भी हटा देता है?

धन्यवाद

उत्तर

11

(कुछ) आपके सवालों के जवाब के लिए:

1) कई कैश होने में कोई समस्या नहीं है। वास्तव में, एप्पल की क्लास संदर्भ से:

  • आप अलग अलग विन्यास के साथ कई लाए जाने के परिणाम नियंत्रक (विभिन्न प्रकार वर्णनकर्ता और इसी तरह) है, तो आप प्रत्येक एक अलग कैश नाम देना होगा।

मुझे पिछले ऐप्स के साथ समस्याएं थीं, जहां मैंने यह अपवाद प्राप्त करने के लिए केवल यह नहीं किया है कि मैंने हल करने का प्रयास करने में समय बर्बाद कर दिया है।

2) हम किसी भी बार-बार काम को स्टोर करने के लिए कैश का उपयोग करना चाहते हैं, जिसे NSFetchedResultsController को करने की आवश्यकता है। कभी भी अनुभाग या ऑर्डरिंग जानकारी बदल जाती है, कैश अपडेट हो जाता है। इसी तरह, यदि कैश डेटाबेस में वर्तमान जानकारी के अनुरूप नहीं है (आपने एक नई पंक्ति, हटाई गई, आदि जोड़ दी है) तो नियंत्रक कैश जारी करता है और इसे साफ़ करता है।

3) मैंने व्यक्तिगत रूप से viewDidUnload विधि में deleteCacheWithName डाल दिया है। सुनिश्चित नहीं है कि यह सबसे अच्छी जगह है या नहीं।

4 के बारे में निश्चित नहीं है। कैश के पुनर्निर्माण के मामले में - यदि वर्तमान कैश ऐप के साथ सिंक हो गया है तो यह स्वचालित रूप से होना चाहिए। मैंने मेमोरी प्रबंधन और मेरे किसी भी ऐप पर कैश के लिए कुछ भी विशिष्ट नहीं किया है।

5) यह कोई समस्या नहीं होनी चाहिए। फिर, एप्पल के दस्तावेज़ से:

  • आप एक प्राप्त किए गए परिणाम नियंत्रक के लिए एक प्रतिनिधि सेट करते हैं, नियंत्रक इसके कामयाब वस्तु संदर्भ से परिवर्तन सूचनाएँ प्राप्त करने के पंजीकृत करता है। संदर्भ में कोई भी परिवर्तन जो परिणाम या अनुभाग जानकारी को प्रभावित करता है, संसाधित किया जाता है और परिणाम तदनुसार अपडेट किए जाते हैं। जब नियंत्रक ऑब्जेक्ट स्थान बदलते हैं या जब अनुभाग संशोधित होते हैं तो नियंत्रक प्रतिनिधि को सूचित करता है ( NSFetchedResultsControllerDelegate देखें)। तालिका दृश्य के प्रदर्शन को अपडेट करने के लिए आप आमतौर पर इन विधियों का उपयोग करते हैं। http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html

    HTH

    :

FYI करें, यहाँ इस वर्ग के लिए सेब देव डॉक्स के लिए लिंक है

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