2012-02-06 12 views
5

जब मैं अपने अनुप्रयोग के लिए डिफ़ॉल्ट प्राथमिकताएँ सेट कर रहा हूं, मैं निम्नलिखित कर रहा हूँ:रजिस्टर का उपयोग क्यों करें डिफ़ॉल्ट: setValue के बजाय: forKey :?

1) Settings.bundle अंदर से पढ़ना Root.plist एक शब्दकोश में।

2) यदि एक प्राथमिकता सेट है, मैं परीक्षण, और यदि नहीं मैं के माध्यम से [NSUserDefaults standardUserDefaults] registerDefaults:]

समस्या मेरी चूक शब्दकोश दर्ज की कर रहा हूँ है, registerDefaults: के साथ पंजीकृत चूक, लगातार दुकान पर जाने नहीं है, इसलिए यदि कभी नहीं उपयोगकर्ता अपनी वरीयताओं को बदलता है, मैं अपनी डिफ़ॉल्ट वरीयताओं को पढ़ रहा हूं और ऐप लॉन्च होने पर उन्हें NSUserDefaults के साथ पंजीकृत कर रहा हूं।

इसके बजाय registerDefaults: का उपयोग कर रहा setValue:forKey: इस्तेमाल कर सकते हैं और मेरे डिफ़ॉल्ट सेटिंग लगातार दुकान पर जाने के लिए है, & निर्माण करने के लिए प्रत्येक प्रक्षेपण पर एक शब्दकोश रजिस्टर की जरूरत को दरकिनार करने का

। हालांकि, ऐप्पल का documentation और sample code दोनों registerDefaults: पर इंगित करता है।

तो मैं यह समझने की कोशिश कर रहा हूं कि मुझे कब और क्यों registerDefaults: का उपयोग करना चाहिए और मुझे इसके बजाय setValue:forKey: का उपयोग क्यों करना चाहिए?

+1

मुझे यह संबंधित प्रश्न मिला: [इसका उपयोग क्या है - [NSUserDefaults रजिस्टर डिफ़ॉल्ट:]?] (Http://stackoverflow.com/questions/4931167/what-is-the-use-of-nsuserdefaults-registerdefaults) जबकि उत्तरों मतभेदों को समझाते हैं, फिर भी वे वास्तव में नहीं कहते हैं कि आपको एक दूसरे का उपयोग क्यों करना चाहिए। (उत्तर दृढ़ता के बारे में मेरे प्रश्न को अनदेखा करते हैं।) – gabrielk

उत्तर

5

समस्या, है registerDefaults के साथ पंजीकृत चूक: लगातार दुकान पर जाने नहीं है, इसलिए मैं अपने डिफ़ॉल्ट प्राथमिकताएँ एप्लिकेशन लॉन्च होने पढ़ने और उन्हें NSUserDefaults साथ हर बार दर्ज की कर रहा हूँ अगर उपयोगकर्ता उनकी प्राथमिकताओं में परिवर्तन कभी नहीं।

हां। वह एक समस्या क्यों है? कोड में आपके पास पहले से मौजूद डिस्क चीज़ों को क्यों लिखें?

इसके बजाय registerDefaults का उपयोग करने का

: मैं इस्तेमाल कर सकते हैं setValue: forKey: और मेरे डिफ़ॉल्ट सेटिंग लगातार दुकान पर जाने, & निर्माण करने के लिए प्रत्येक प्रक्षेपण पर एक शब्दकोश रजिस्टर की जरूरत को दरकिनार किया है। हालांकि, ऐप्पल के दस्तावेज़ और नमूना कोड दोनों रजिस्टर करने के लिए इंगित करते हैं डिफ़ॉल्ट:।

केवल तभी यदि आपने पहली बार चेक किया है "क्या यह मान सेट है? नहीं? ठीक है, अब इसे सेट करें।" registerDefaults: का उपयोग करने से यह अधिक कोड और लागत है।

आपको डिफ़ॉल्ट सेट करने के लिए registerDefaults: का उपयोग करना चाहिए। सक्रिय रूप से सेट किए गए मानों को सहेजने के लिए आपको setValue:forKey: का उपयोग करना चाहिए।

यह भी याद रखें कि NSUserDefaults मैक पर भी मौजूद है। वहां, उपयोगकर्ता सीधे defaults कमांड के साथ सेटिंग्स तक पहुंच सकता है, इसलिए प्रोग्राम एकमात्र ऐसी इकाई नहीं है जो इस स्टोर को संशोधित कर सके।

+0

मुझे लगता है कि यह एक समस्या नहीं है, यह बहुत ही अनावश्यक लगता है। यदि मैं डिफ़ॉल्ट सेट अप करता हूं, और उपयोगकर्ता उन्हें पसंद नहीं करता है, तो वह उन्हें बदल सकता है और परिवर्तन सहेजा जा सकता है ... और मुझे अभी भी डिफ़ॉल्ट सेट अप रखना होगा। इसी प्रकार, यदि कोई उपयोगकर्ता डिफ़ॉल्ट से खुश है और उसके पास उन्हें सहेजने का कोई कारण नहीं है ... मुझे अभी भी डिफ़ॉल्ट सेट अप रखना होगा। डिफ़ॉल्ट को बचाने के लिए मुझे और अधिक समझ में आता है, क्योंकि संग्रहित डिफ़ॉल्ट उपयोगकर्ता द्वारा वैसे भी ओवरराइड हो जाएगा।मुझे अभी भी रजिस्टर का उपयोग करने के लिए ठोस केस नहीं दिख रहा है: – gabrielk

+0

यह मेरे लिए विशेष रूप से अजीब है क्योंकि मैं जो डिफ़ॉल्ट चाहता हूं उसे सेटिंग्स.बंडल .plist फ़ाइल में संग्रहीत किया जाता है, लेकिन इन्हें वास्तविक डिफ़ॉल्ट के रूप में उपयोग नहीं किया जाता है (एक संकेत के रूप में विकल्प प्रदर्शित करते समय जीयूआई?)। – gabrielk

+1

इस तथ्य के अलावा कि स्टोर में डिफ़ॉल्ट स्टोर करने के लिए यह अधिक कोड लेता है (क्योंकि आपको पहले परीक्षण करना है कि वे पहले से सेट हैं या नहीं), उन्हें स्टोर में सहेजना भविष्य में अपग्रेड और कचरे में डिफ़ॉल्ट को बदलना असंभव बनाता है यदि आप अपग्रेड के दौरान सेटिंग हटाते हैं तो स्पेस। लेकिन "सभी डिफ़ॉल्ट जांचने के लिए यह बहुत अधिक कोड है और फिर उन्हें सेट करें" वास्तव में 'रजिस्टर डिफ़ॉल्ट' के डेवलपर्स के लिए सबसे बड़ी जीत है। –

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