मैं उपयोग कर रहा हूँ +[NSUserDefaults standardUserDefaults]आवेदन सेटिंग्स को संग्रहीत करना। यह मोटे तौर पर एक दर्जन से अधिक स्ट्रिंग मूल्यों के होते हैं। यह सिर्फ उन्हें एक डिफ़ॉल्ट मान के लिए सेटिंग इन मूल्यों को नष्ट स्थायी रूप से करने के बजाय करना संभव है?
क्लियरिंग NSUserDefaults
आप इस तरह आवेदन के लगातार डोमेन निकाल सकते हैं:
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
स्विफ्ट में 3 और बाद में:
if let bundleID = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: bundleID)
}
यह @samvermette से जवाब देने के लिए समान है, लेकिन एक छोटा सा क्लीनर IMO है।
इस कोड को रीसेट करता है पंजीकरण डोमेन के लिए चूक:
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
दूसरे शब्दों में, यह removeObjectForKeyहर एक कुंजी के लिए आप कभी भी है कि अनुप्रयोग में पंजीकृत।
इस Apple डेवलपर मंच पर केन Thomases को क्रेडिट धागा।
आप उपयोग कर की कोशिश की - removeObjectForKey?
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
यहाँ स्विफ्ट में जवाब है:
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
आप इसे की जरूरत है, जबकि विकास, आप भी अपने सिम्युलेटर रीसेट कर सकते हैं, सभी को हटाने NSUserDefaults।
आईओएस सिम्युलेटर -> सामग्री और सेटिंग रीसेट करें ...
ध्यान रखें कि यह भी सिम्युलेटर पर सभी एप्लिकेशन और फ़ाइलों को नष्ट करेगा।
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
स्विफ्ट में:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
जब वे कोड क्लीनर बनाने मैं एक्सटेंशन प्यार:
extension NSUserDefaults {
func clear() {
guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
return
}
self.removePersistentDomainForName(domainName)
}
}
ध्यान दें: यह जवाब स्विफ्ट के लिए भी अद्यतन किया गया है।
के बारे में क्या यह एक पंक्ति में है करने के लिए?
विस्तार @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()
मुझे मिला:
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
यह एक बग या जो कुछ भी है, लेकिन removePersistentDomainForNameसभी को साफ़ करते समय काम नहीं कर रहा NSUserDefaultsमूल्यों।
तो, बेहतर विकल्प है कि पुनर्स्थापित करने के लिए है PersistentDomainऔर आप निम्नलिखित तरीके के माध्यम से ऐसा कर सकते हैं:
NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
उपरोक्त सभी उत्तर बहुत प्रासंगिक हैं, लेकिन अगर किसी को अभी भी असमर्थ नष्ट कर दिया अनुप्रयोग के लिए userdefaults पुनर्स्थापित करने के लिए है, तो आप आप की सामग्री सेटिंग सिम्युलेटर रीसेट कर सकते हैं, और यह काम करेंगे।
@ 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 कॉलिंग: बजाय, एक शब्दकोश संभावना है कि अन्य सेटिंग्स शामिल होंगे के रूप में यह एक व्यापक गुंजाइश पर लागू होता है वापस आ जाएगी।
आप तो चाबियाँ पर पुनरावृत्ति मानों रीसेट किया जा रहे हैं में से किसी को फ़िल्टर करना चाहते हैं तो जिस तरह से यह करने के लिए है। जाहिर है, अगर आप सिर्फ संबंध के बिना अनुप्रयोग के लिए वरीयता के सभी परमाणु चाहते हैं, तो अन्य तरीकों से ऊपर पोस्ट में से एक सबसे कारगर है।
यह प्रयास करें, यह मेरे लिए काम कर रहा है।
कोड की एक पंक्ति
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
यदि आवेदन रीसेट की आवश्यकता होगी, सेटिंग माइक्रोफोन (मेरे मामले) के लिए उपयोग के लिए nsuserdefault है, एक सरल उपाय एंथोनी McCormick (से जवाब है डिवाइस पर मीडिया के लिए आवेदन पहुंचने करने के लिए कैसे - -? ALAssetsLibraryErrorDomain कोड = -3312 "ग्लोबल पहुँच अस्वीकृत" Iphone )।
डिवाइस पर, सेटिंग> जनरल जाना>> स्थान चेतावनियां रीसेट रीसेट













