क्लियरिंग NSUserDefaults

वोट
274

मैं उपयोग कर रहा हूँ +[NSUserDefaults standardUserDefaults]आवेदन सेटिंग्स को संग्रहीत करना। यह मोटे तौर पर एक दर्जन से अधिक स्ट्रिंग मूल्यों के होते हैं। यह सिर्फ उन्हें एक डिफ़ॉल्ट मान के लिए सेटिंग इन मूल्यों को नष्ट स्थायी रूप से करने के बजाय करना संभव है?

13/02/2009 को 08:49
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


15 जवाब

वोट
495

आप इस तरह आवेदन के लगातार डोमेन निकाल सकते हैं:

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

स्विफ्ट में 3 और बाद में:

if let bundleID = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundleID)
}

यह @samvermette से जवाब देने के लिए समान है, लेकिन एक छोटा सा क्लीनर IMO है।

26/07/2011 को 03:55
का स्रोत उपयोगकर्ता

वोट
101

इस कोड को रीसेट करता है पंजीकरण डोमेन के लिए चूक:

[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];

दूसरे शब्दों में, यह removeObjectForKeyहर एक कुंजी के लिए आप कभी भी है कि अनुप्रयोग में पंजीकृत।

इस Apple डेवलपर मंच पर केन Thomases को क्रेडिट धागा।

10/06/2010 को 05:40
का स्रोत उपयोगकर्ता

वोट
95

आप उपयोग कर की कोशिश की - removeObjectForKey?

 [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
13/02/2009 को 08:51
का स्रोत उपयोगकर्ता

वोट
29

यहाँ स्विफ्ट में जवाब है:

let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
15/04/2015 को 14:36
का स्रोत उपयोगकर्ता

वोट
27

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

आईओएस सिम्युलेटर -> सामग्री और सेटिंग रीसेट करें ...

ध्यान रखें कि यह भी सिम्युलेटर पर सभी एप्लिकेशन और फ़ाइलों को नष्ट करेगा।

06/09/2011 को 15:54
का स्रोत उपयोगकर्ता

वोट
13
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
                    [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
20/01/2014 को 04:56
का स्रोत उपयोगकर्ता

वोट
6

स्विफ्ट में:

let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
18/08/2016 को 10:36
का स्रोत उपयोगकर्ता

वोट
5

जब वे कोड क्लीनर बनाने मैं एक्सटेंशन प्यार:

extension NSUserDefaults {
    func clear() {
        guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
            return
        }

        self.removePersistentDomainForName(domainName)
    }
}
22/08/2016 को 22:33
का स्रोत उपयोगकर्ता

वोट
5

ध्यान दें: यह जवाब स्विफ्ट के लिए भी अद्यतन किया गया है।

के बारे में क्या यह एक पंक्ति में है करने के लिए?

विस्तार @Christopher रोजर्स जवाब - स्वीकार कर लिया है।

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];

और हाँ, कुछ समय आप की आवश्यकता हो सकती synchronizeहै,

[[NSUserDefaults standardUserDefaults] synchronize];

मैं यह करने के लिए एक विधि बना लिया है,

- (void) clearDefaults {
    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

स्विफ्ट ?

तेजी से अपनी और भी आसान है।

extension UserDefaults {
    class func clean() {
        guard let aValidIdentifier = Bundle.main.bundleIdentifier else { return false }
        self.standard.removePersistentDomain(forName: aValidIdentifier)
        self.standard.synchronize()
    }
}

और उपयोग :

UserDefaults.clean()
11/08/2015 को 06:02
का स्रोत उपयोगकर्ता

वोट
5

मुझे मिला:

osascript -e 'tell application "iOS Simulator" to quit'
xcrun simctl list devices | grep -v '^[-=]' | cut -d "(" -f2 | cut -d ")" -f1 | xargs -I {} xcrun simctl erase "{}"

स्रोत: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab

04/12/2014 को 18:33
का स्रोत उपयोगकर्ता

वोट
2

यह एक बग या जो कुछ भी है, लेकिन removePersistentDomainForNameसभी को साफ़ करते समय काम नहीं कर रहा NSUserDefaultsमूल्यों।

तो, बेहतर विकल्प है कि पुनर्स्थापित करने के लिए है PersistentDomainऔर आप निम्नलिखित तरीके के माध्यम से ऐसा कर सकते हैं:

NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
09/03/2016 को 08:28
का स्रोत उपयोगकर्ता

वोट
1

उपरोक्त सभी उत्तर बहुत प्रासंगिक हैं, लेकिन अगर किसी को अभी भी असमर्थ नष्ट कर दिया अनुप्रयोग के लिए userdefaults पुनर्स्थापित करने के लिए है, तो आप आप की सामग्री सेटिंग सिम्युलेटर रीसेट कर सकते हैं, और यह काम करेंगे।यहाँ छवि विवरण दर्ज

16/10/2014 को 09:44
का स्रोत उपयोगकर्ता

वोट
1

@ Folse के जवाब पर विस्तार ... मेरा मानना ​​है कि एक अधिक सही कार्यान्वयन किया जाएगा ...

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] persistentDomainForName: appDomain];
    for (NSString *key in [defaultsDictionary allKeys]) {
      NSLog(@"removing user pref for %@", key);
      [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
    }

... बुला NSUserDefault के persistentDomainForName: विधि। डॉक्स राज्य के रूप में, विधि "एक शब्दकोश कुंजी और निर्दिष्ट लगातार डोमेन मूल्यों से युक्त देता है।" dictionaryRepresentation कॉलिंग: बजाय, एक शब्दकोश संभावना है कि अन्य सेटिंग्स शामिल होंगे के रूप में यह एक व्यापक गुंजाइश पर लागू होता है वापस आ जाएगी।

आप तो चाबियाँ पर पुनरावृत्ति मानों रीसेट किया जा रहे हैं में से किसी को फ़िल्टर करना चाहते हैं तो जिस तरह से यह करने के लिए है। जाहिर है, अगर आप सिर्फ संबंध के बिना अनुप्रयोग के लिए वरीयता के सभी परमाणु चाहते हैं, तो अन्य तरीकों से ऊपर पोस्ट में से एक सबसे कारगर है।

18/02/2014 को 02:42
का स्रोत उपयोगकर्ता

वोट
0

यह प्रयास करें, यह मेरे लिए काम कर रहा है।

कोड की एक पंक्ति

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
01/03/2018 को 05:57
का स्रोत उपयोगकर्ता

वोट
0

यदि आवेदन रीसेट की आवश्यकता होगी, सेटिंग माइक्रोफोन (मेरे मामले) के लिए उपयोग के लिए nsuserdefault है, एक सरल उपाय एंथोनी McCormick (से जवाब है डिवाइस पर मीडिया के लिए आवेदन पहुंचने करने के लिए कैसे - -? ALAssetsLibraryErrorDomain कोड = -3312 "ग्लोबल पहुँच अस्वीकृत" Iphone )।

डिवाइस पर, सेटिंग> जनरल जाना>> स्थान चेतावनियां रीसेट रीसेट

15/08/2014 को 00:15
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more