यद्यपि आप चूक सेटिंग्स को परिभाषित मदद मुझे, वे वास्तव में एक मूल्य के रूप में जमा नहीं कर रहे हैं। वे डिफ़ॉल्ट रूप से संग्रहीत हैं। यदि आप इसे पढ़ने का प्रयास करते हैं, तो मान शून्य है। डिफ़ॉल्ट सेटिंग एक और संपत्ति है क्योंकि मान है। लेकिन इसका मतलब यह नहीं है कि डिफ़ॉल्ट मान डिफ़ॉल्ट रूप से लिखेंगे।
मैं क्या करता हूं, पहले, जांच करें कि कुछ सेटिंग है, (मुझे यकीन है कि इसमें कोई मूल्य होना चाहिए) उस पर कुछ भी संग्रहीत है। यदि उसके पास कुछ भी नहीं है तो मैं सभी डिफ़ॉल्ट लिखता हूं।
यहां एक उदाहरण है।
AppDelegate.m पर मैं जांचता हूं कि ईमेल_notificaciones_preference का मान है, यदि नहीं, तो मैं प्रत्येक सेटिंग में सभी डिफ़ॉल्ट सेटिंग्स लिखता हूं।
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
NSUserDefaults * standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString * email_notificaciones_preference = [standardUserDefaults objectForKey:@"email_notificaciones_preference"];
if (!email_notificaciones_preference) {
[self registerDefaultsFromSettingsBundle];
}
}
यह फ़ंक्शन वह है जो मैं प्रत्येक तत्व के लिए डिफ़ॉल्ट लिखने के लिए उपयोग करता हूं।
#pragma NSUserDefaults
- (void)registerDefaultsFromSettingsBundle {
// this function writes default settings as settings
NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
if(!settingsBundle) {
NSLog(@"Could not find Settings.bundle");
return;
}
NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
for(NSDictionary *prefSpecification in preferences) {
NSString *key = [prefSpecification objectForKey:@"Key"];
if(key) {
[defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
NSLog(@"writing as default %@ to the key %@",[prefSpecification objectForKey:@"DefaultValue"],key);
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
}
आशा है कि मदद करता है।
बहुत समय की बचत के लिए धन्यवाद! –
बहुत अच्छा समाधान - मैंने इसे स्विफ्ट में अनुवादित किया और अगर किसी को इसकी आवश्यकता हो तो इसे उत्तर के रूप में जोड़ा गया। – Compufreak
'[[NSUserDefaults standardUserDefaults] सिंक्रनाइज़ करना चाहिए];' भी जोड़ा जाना चाहिए? –