NSUserDefaults में उपयोगकर्ता डिफ़ॉल्ट मान कैसे हटाएं?


79

यानी, मेरा ऐप शुरुआत में कुछ मानक डिफ़ॉल्ट मान सेट करता है। तब वे मान उपयोगकर्ता द्वारा ओवरराइड हो सकते हैं। और जब उपयोगकर्ता चीजों को गड़बड़ करता है, तो मैं उन सेटिंग्स को अपने ऐप डिफ़ॉल्ट मानों पर वापस सेट करना चाहता हूं। जैसा कि मैं इसे समझता हूं, ऐप डिफॉल्ट्स उपयोगकर्ता डिफॉल्ट्स की तुलना में एक अलग शब्दकोश हैं, और उपयोगकर्ता डिफॉल्ट्स उन ऐप डिफॉल्ट्स को ओवरराइड करता है। लेकिन मैंने उपयोगकर्ता चूक को हटाने के लिए तरीके नहीं देखे हैं। कोई उपाय?

जवाबों:



97

इस कोड का उपयोग करें

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"MyKey"];

यदि आप तुरंत बचाना चाहते हैं तो सिंक्रनाइज़ करना न भूलें

[[NSUserDefaults standardUserDefaults] synchronize];

NSUserDefaults क्लास संदर्भ

सिंक्रोनाइज़ करें - यह विधि स्वचालित रूप से आवधिक अंतराल पर मंगाई जाती है, इस पद्धति का उपयोग केवल तभी करें जब आप स्वत: सिंक्रनाइज़ेशन की प्रतीक्षा नहीं कर सकते (उदाहरण के लिए, यदि आपका आवेदन बाहर निकलने वाला है) या यदि आप डिस्क पर मौजूद है तो उपयोगकर्ता चूक को अपडेट करना चाहते हैं हालाँकि आपने कोई बदलाव नहीं किया है।

स्विफ्ट 5:

UserDefaults.standard.removeObject(forKey: "MyKey")
UserDefaults.standard.synchronize()

2
+1 के लिए [[NSUserDefaults standardUserDefaults] सिंक्रनाइज़ करें]; मैं आमतौर पर इसे जोड़ना भूल जाता हूं।
अगस्ताइन

यदि आप सिंक्रनाइज़ नहीं करते हैं, तो जब आप अपना ऐप बंद करते हैं तो यह स्वचालित रूप से सिंक्रनाइज़ हो जाएगा।
युकेल बेयराम

1
@yucelbayram -> हाँ, लेकिन अगर आप तुरंत बचाना चाहते हैं तो आपको सिंक करना होगा।
रजनीश

1
@ रजनीश071 हाँ यह सच है।
युकेल बेयरम

Apple प्रलेखन वर्तमान में सिंक्रोनाइज़ विधि के बारे में कहता है: "किसी भी लंबित अतुल्यकालिक अद्यतन के लिए चूक डेटाबेस और रिटर्न के लिए प्रतीक्षा करता है; यह विधि अनावश्यक है और इसका उपयोग नहीं किया जाना चाहिए।" अब आपको इसका उपयोग करने की आवश्यकता नहीं है।
anders32

8
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];

8

आसान कॉपी पेस्टिंग के लिए स्विफ्ट संस्करण:

var idForUserDefaults = "somestupidtext"
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.removeObjectForKey(idForUserDefaults)
userDefaults.synchronize()

या

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()

Apple दस्तावेज़ बताता है कि .synchronize() "अनावश्यक है और इसका उपयोग नहीं किया जाना चाहिए। developer.apple.com/documentation/foundation/userdefaults/…
जेम्स जॉर्डन टेलर

6

विशिष्ट कुंजी मान निकालने के लिए:

स्विफ्ट 3+

UserDefaults.standard.removeObject(forKey: "KEY")

Obj सी

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];

यदि आपको UserDefaults / Clear All datas रीसेट करने की आवश्यकता है :

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

स्विफ्ट 3:

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

4

स्विफ्ट 3.0 कोड के लिए अद्यतन:

UserDefaults.standard.removeObject(forKey: "YOURKEY")


2
Value of type 'UserDefaults' has no member 'remove'
चार्ली फिश

1
kbunarjo, क्या आपने भी यह कोशिश की है। जबरदस्त हंसी। स्विफ्ट 3 -UserDefaults.standard.removeObject (forKey: "की")
Jeff

1
@ जफ वे हाल ही में स्विफ्ट 3 (3.1) का नया संस्करण जारी किया। मैंने अभी तक डॉक्स पर एक नज़र नहीं डाली है, इसलिए मैं यह मान रहा हूं कि मेरा संस्करण अब काम नहीं करता है।
kbunarjo

हां, लगा कि यह मजाकिया है :)
जेफ

1
UserDefaults.standard.removeObject (forKey: "YourKEY");
मार्टिन चैंबरलिन


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.