मैं +[NSUserDefaults standardUserDefaults]
एप्लिकेशन सेटिंग संग्रहीत करने के लिए उपयोग कर रहा हूं । इसमें लगभग एक दर्जन स्ट्रिंग वैल्यू शामिल हैं। क्या इन मूल्यों को केवल डिफ़ॉल्ट मान पर सेट करने के बजाय स्थायी रूप से हटाना संभव है?
मैं +[NSUserDefaults standardUserDefaults]
एप्लिकेशन सेटिंग संग्रहीत करने के लिए उपयोग कर रहा हूं । इसमें लगभग एक दर्जन स्ट्रिंग वैल्यू शामिल हैं। क्या इन मूल्यों को केवल डिफ़ॉल्ट मान पर सेट करने के बजाय स्थायी रूप से हटाना संभव है?
जवाबों:
आप इस तरह आवेदन के लगातार डोमेन को हटा सकते हैं:
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
आपके द्वारा उस ऐप में दर्ज की गई हर एक कुंजी के लिए है।
[NSUserDefaults resetStandardUserDefaults]
नहीं करता है यह मेरे से परे है।
क्या आपने प्रयोग करने की कोशिश की - removeObjectForKey
?
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
यहाँ स्विफ्ट में जवाब है:
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
वन-लाइनर
if let domainName = NSBundle.mainBundle().bundleIdentifier { NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName) }
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
यदि आपको इसे विकसित करने की आवश्यकता है, तो आप अपने सिम्युलेटर को भी रीसेट कर सकते हैं, सभी को हटा सकते हैं NSUserDefaults
।
iOS सिम्युलेटर -> सामग्री और सेटिंग्स रीसेट करें ...
ध्यान रखें कि यह सिम्युलेटर पर मौजूद सभी ऐप्स और फ़ाइलों को भी हटा देगा।
नोट: यह उत्तर स्विफ्ट के लिए भी अपडेट किया गया है।
इसके बारे में एक पंक्ति में क्या है?
@Christopher Rogers का उत्तर देना - स्वीकृत है।
[[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 }
standard.removePersistentDomain(forName: aValidIdentifier)
standard.synchronize()
}
}
और उपयोग :
UserDefaults.clean()
मुझे एक्सटेंशन पसंद है जब वे कोड क्लीनर बनाते हैं:
extension NSUserDefaults {
func clear() {
guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
return
}
self.removePersistentDomainForName(domainName)
}
}
स्विफ्ट 5
extension UserDefaults {
func clear() {
guard let domainName = Bundle.main.bundleIdentifier else {
return
}
removePersistentDomain(forName: domainName)
synchronize()
}
}
मुझे मिला:
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!)
@ फ़ॉल्स के उत्तर पर विस्तार ... मेरा मानना है कि अधिक सही कार्यान्वयन होगा ...
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's persistentDomainForName: विधि को कॉल करना। डॉक्स स्थिति के रूप में, विधि "एक शब्द देता है जिसमें निर्दिष्ट निरंतर डोमेन में कुंजियाँ और मान होते हैं।" डिक्शनरी रिप्रेसेंटेशन कॉलिंग: इसके बजाय, एक ऐसा शब्दकोश लौटाएगा जिसमें व्यापक पैमाने पर लागू होने के साथ अन्य सेटिंग्स भी शामिल होंगी।
यदि आपको किसी भी मान को रीसेट करने की आवश्यकता है, जिसे रीसेट करना है, तो कुंजियों पर ध्यान देना इसे करने का तरीका है। जाहिर है, अगर आप बिना किसी परवाह के ऐप के लिए सभी प्रीफ्स को सिर्फ न्यूक करना चाहते हैं, तो ऊपर पोस्ट किए गए अन्य तरीकों में से एक सबसे कुशल है।
यदि एप्लिकेशन सेटिंग रीसेट करने की आवश्यकता है तो माइक्रोफ़ोन (मेरा मामला) तक पहुंच के लिए nsuserdefault है, एंथनी मैककॉर्मिक ( Iphone - डिवाइस पर मीडिया के लिए एप्लिकेशन एक्सेस कैसे सक्षम किया जाए? ) से एक सरल समाधान का जवाब है? )।
डिवाइस पर, सेटिंग्स> जनरल> रीसेट> स्थान चेतावनी को रीसेट करें
यह कोशिश करो, यह मेरे लिए काम कर रहा है।
कोड की एकल पंक्ति
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];