2010-07-07 10 views
9

मैं एक आईफोन एप्लिकेशन विकसित कर रहा हूं, मुझे बहु कार्य के कारण आईओएस 4 पर एक समस्या आती है।आईओएस 4 पर एक अद्यतन NSUserDefault कैसे प्राप्त करें?

इस एप्लिकेशन में सेटिंग्स.बंडल में परिभाषित डिफ़ॉल्ट सेटिंग्स हैं। यदि मैं अपना आवेदन चलाता हूं तो मैंने इसे छोड़ दिया (इसलिए यह पृष्ठभूमि में जाता है)। मैं सेटिंग्स बदल दूंगा और एप्लिकेशन को पुनरारंभ करूंगा (यह स्टैंडबाय और विधि से बाहर आता है: applicationDidBecomeActive() को कॉल किया जाता है)।

NSUserDefault में मान अपडेट नहीं हैं, लेकिन जब मैं एप्लिकेशन छोड़ देता हूं और फिर से लॉन्च करता हूं। मूल्य अच्छे हैं।

क्या कोई मेरे जैसा ही समस्या अनुभव करता है? क्या मैं कुछ गलत कर रहा हूं?

आपकी सलाह/सहायता के लिए धन्यवाद।

+0

क्या आपका ऐप फिर से सक्रिय हो जाने पर आप डिफ़ॉल्ट को रीफ्रेश कर रहे हैं? यदि आप नहीं हैं, तो पृष्ठभूमि में रहते हुए उन्हें बदला जाना चाहिए। – iwasrobbed

उत्तर

20

मैं आप के रूप में एक ही समस्या थी, और applicationDidBecomeActive में

[[NSUserDefaults standardUserDefaults] synchronize]; 

फोन करके उसके चारों ओर मिला है।

किसी कारण से [NSUserDefaults standardUserDefaults] ऑब्जेक्ट जो आप अपने ऐप में एक्सेस कर सकते हैं, उसे वास्तविक प्लेस्ट फ़ाइलों के साथ सिंक्रनाइज़ नहीं किया जाता है जब एक ऐप निलंबित होने के बाद फिर से सक्रिय हो जाता है। synchronize विधि को कॉल करना एक सिंक्रनाइज़ेशन को मजबूर करता है।

+0

यदि आप उन परिवर्तनों को फ़ाइल में लिखना चाहते हैं तो NSUserDefaults को बदलने के बाद सिंक्रनाइज़ करने के लिए सिंक्रनाइज़ करना ज़रूरी है। यदि आप परिवर्तन नहीं करते हैं तो बस स्मृति में संग्रहीत किया जाएगा। – Goles

+1

@ श्री गांडो यह सच नहीं है। 'NSUserDefaults' को समय-समय पर स्वचालित रूप से फ़ाइल करने के लिए सिंक्रनाइज़ किया जाता है। –

3

आपको सेटिंग्स में बदलावों की आवश्यकता है। यह करने के लिए सबसे अच्छा तरीका है वह आपको उपलब्ध एक श्रोता स्थापित करने के लिए है:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(settingsChanged) name:NSUserDefaultsDidChangeNotification object:nil]; 

केवल एक चीज आप के बारे में सुनिश्चित करने की जरूरत है कि आप नहीं परिवर्तन अपने श्रोता में किसी भी सेटिंग करते हैं, या आप प्राप्त है

मैं सिंक्रनाइज़ करने से दूर रहूंगा क्योंकि मेरे अनुभव में मैंने पाया कि मुझे इसे दो बार चलाने के लिए था। लेकिन यह आकस्मिक व्यवहार है। स्टोर से नई सेटिंग्स को फिर से पढ़े जाने पर श्रोता आपको सूचित करेगा।

+0

इसका उपयोग करने का नकारात्मक पक्ष यह है कि जब आप 'NSUserDefaults' के बारे में कुछ भी बदलते हैं तो यह भी आग लग जाता है। तो हर बार जब आप '[[NSUserDefaults standardUserDefaults] setObject कहते हैं: someObject forKey: @ "someKey"]' यह अधिसूचना प्रसारित की जाती है, और विधि को कॉल किया जाता है। जो मैं नहीं (और संभवतः पूछताछकर्ता) चाहता हूं। इसके अलावा, मुझे 'सिंक्रनाइज़' के साथ कोई समस्या नहीं है, इसे केवल एक बार ठीक काम करने के लिए बुलाया गया है। –

+0

इस तरह से स्पष्ट रूप से बेहतर है। बस उपयोगकर्ता-डिफ़ॉल्ट अपडेट करें, और केवल व्यवहार पर्यवेक्षक में व्यवहार परिवर्तन करें। और साथ ही, आपको आईओएस 4 के मल्टीटास्किंग के साथ चल रहे एप्लिकेशन के दौरान रीयल-टाइम में किसी उपयोगकर्ता-डेफल्ट परिवर्तनों को लागू करना होगा। – Eonil

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