मेरे पास +(void)initialize
विधि वाला एक ऐपडिलेगेट क्लास है जिसका उपयोग मैं कुछ डिफ़ॉल्ट पंजीकृत करने के लिए करता हूं। यहाँ कोड है कि मैं का उपयोग करें:मौजूदा मानों को ओवरराइट किए बिना NSUserDefaults का उपयोग करके उपयोगकर्ता डिफ़ॉल्ट को कैसे पंजीकृत करें?
+ (void)initialize {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
मैं भी Preferences.xib जो चेक बॉक्स की जोड़ी (NSButton
) वरीयताओं की है कि प्रदर्शन स्थिति रखती बनाया। वे NSUserDefaultsController
से उसी कुंजी के साथ बाध्य हैं (इस मामले में fooKey और barKey)। प्रत्येक बार जब मैं एक ऐप लॉन्च करता हूं और "डिफ़ॉल्ट" बदलता हूं तो उन्हें अगले ऐप लॉन्च पर बहाल किया जाता है।
क्या पहले से ही मौजूदा मानों को ओवरराइट किए बिना "डिफ़ॉल्ट डिफ़ॉल्ट" पंजीकरण करने का कोई तरीका है? हो सकता है कि हर बार जब मैं ऐप बनाता हूं और लॉन्च करता हूं तो इसकी वरीयता फाइल को फिर से बनाया जा रहा है? हो सकता है कि मुझे NSUserDefaultsController
से चेकबॉक्स को अनइंड करना चाहिए और प्राथमिकता विंडो नियंत्रक में कुछ कस्टम कोड के साथ स्वयं के मानों को बनाए रखना चाहिए?
मैं उपयोगकर्ता डिफ़ॉल्ट को बनाए रखने के लिए अपनी पसंद के कार्यान्वयन को सुनना चाहता हूं।
मैं -registerDefaults:
के लिए मैक ओएस एक्स 10.6.2 और XCode 3.2.1
सुनिश्चित करें चेक बॉक्स "साझा उपयोगकर्ता चूक नियंत्रक" करने के लिए, नियंत्रक कुंजी "मूल्यों", मॉडल कुंजी पथ "fooKey"/"barKey" बाध्य कर रहे हैं सुनिश्चित करें। अन्यथा आपका कोड मेरे लिए ठीक दिखता है। – Costique
'@" नहीं "' एक बूलियन शाब्दिक नहीं है; यह "नहीं" शब्द के लिए एक स्ट्रिंग अक्षर है। आपको '[NSNumber numberWithBool: NO] 'का उपयोग करना चाहिए; अन्यथा, उपयोगकर्ता डिफ़ॉल्ट में मान Booleans नहीं होगा। –
नहीं, वे नहीं होंगे, लेकिन अगर मैं उन्हें बूल के रूप में पढ़ता हूं - वे करेंगे। डैनियल एच स्टीनबर्ग की पुस्तक "कोको प्रोग्रामिंग" (pragprog.com) से उद्धरण: वास्तव में, जब आप शब्दकोश में BOOL डालते हैं तो आपको इतना स्पष्ट होने की आवश्यकता नहीं होती है। जब आप प्राथमिकताओं से पढ़ते हैं तो आप मान को YES या NO में स्ट्रिंग के रूप में पास कर सकते हैं और फिर भी इस मान से BOOL बना सकते हैं। – Eimantas