2008-11-30 12 views
5

मैं [NSKeyedArchiver archiveRootObject:toFile:] का उपयोग करके अपने मुख्य UITabBarController को क्रमबद्ध करके अपने आईफोन एप्लिकेशन की स्थिति को संरक्षित करने की कोशिश कर रहा हूं, लेकिन मैं कठिनाइयों में भाग रहा हूं।पुनरारंभ करने के लिए आवेदन स्थिति को संरक्षित करना

सबसे पहले मैं UIImage साथ एक समस्या थी, क्योंकि यह NSCoding प्रोटोकॉल लागू नहीं है, लेकिन मुझे लगता है कि UIImage कि दुकानों के लिए एक एक्सटेंशन श्रेणी बनाकर हल और कच्चे छवि डेटा प्राप्त करता है।

जिस समस्या पर मैं अब अटक गया हूं वह यह है कि जब मैं संग्रह से पुनर्स्थापित करता हूं तो मेरे दृश्य नियंत्रक वहां नहीं होते हैं। मेरे प्रत्येक टैब में UINavigationControllers है, और जब मैं पुनर्स्थापित करता हूं, तो UINavigationItem एस अभी भी वहां हैं (मैं बैक बटन का उपयोग कर सकता हूं और उन्हें बदलने के लिए) लेकिन दृश्य नियंत्रक अभी चले गए हैं।

मुझे लगता है कि UINavigationController की viewControllers संपत्ति (nonatomic, copy) चिह्नित है। क्या इसका मतलब यह है कि जब आप UINavigationController संग्रहित करते हैं, तो इसमें दृश्य नियंत्रकों का ढेर शामिल नहीं होता है? यदि हां, तो मैं इसके आसपास कैसे हो सकता हूं? मैंने पहली बार सोचा कि मैं UINavigationController के लिए NSCoding विधियों को ओवरराइड कर दूंगा, लेकिन यह एनआईबी फ़ाइल से प्रारंभिकता को खराब करता है।

मैं थोड़ा परेशान हूं कि मुझे ऐप स्थिति को संरक्षित करने में बहुत कठिनाई हो रही है। मुझे लगा कि यह एक सामान्य उपयोग मामला था कि यह लागू करने के लिए सीधा होगा। क्या मुझसे कोई चूक हो रही है?

उत्तर

5

@property पर विशेषताओं में संग्रह व्यवहार के साथ बहुत कम या कुछ नहीं है (वे केवल वर्णन करते हैं कि गेटर्स और सेटर्स कैसे काम करते हैं)।

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

आम तौर पर, लोग आवेदन स्थिति को संग्रहीत करने के लिए एनएससीओडीडी का उपयोग नहीं करते हैं क्योंकि आवेदन प्रणाली का गठन आपके आवेदन के लिए विशिष्ट है।

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

3

मैं कभी भी इस दृष्टिकोण को काम करने में सक्षम नहीं था। जो मैंने किया था, उसका अपना प्रोटोकॉल था, और प्रत्येक व्यू कंट्रोलर को उस दृश्य के लिए आवश्यक मेटाडेटा को सहेजने/पुनर्स्थापित करने के लिए होना चाहिए (उदाहरण के लिए आपको छवि डेटा को सहेजने की आवश्यकता नहीं है, केवल छवि का नाम)। एक बार आपके पास यह हो जाने के बाद, नेविगेशन नियंत्रकों (+ ढेर) पर चलने के लिए कुछ सामान्य कोड लिखना और डेटा के पूरे सेट को सहेजना/पुनर्स्थापित करना काफी आसान है। बहुत सारे काम की तरह लगता है, लेकिन वास्तव में बहुत आसान था।

5

आप पूरे टैब बार नियंत्रक को संग्रहीत करने का प्रयास क्यों कर रहे हैं? बस NSUserDefaults का उपयोग करें और चयनित टैब अनुक्रमणिका को सहेजें। फिर, जब आप ऐप लोड करते हैं, तो सहेजे गए मान के आधार पर टैब इंडेक्स का चयन करें।

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