जवाबों:
स्विफ्ट 3.0
नीचे दिया गया उत्तर अब ऐसा नहीं है जब मैंने यह परीक्षण किया है। जब nilपरिणाम के लिए सेट NSCFData संग्रहीत किया जा रहा है। संभवतः एक NSNull वस्तु संदर्भ है, लेकिन मैं सकारात्मक नहीं हूं।
एक कुंजी के उपयोग के लिए एक मूल्य को पूरी तरह से हटाने के लिए UserDefaults.standard.removeObject(forKey: "YourDefault")
मैंने निम्नलिखित कोड के साथ परीक्षण किया:
UserDefaults.standard.set(["a", "b", "c"], forKey: "MyDefaults")
print("Test A: My saved defaults \(UserDefaults.standard.object(forKey: "MyDefaults"))")
UserDefaults.standard.set(nil, forKey: "MyDefaults")
print("Test B: My defaults set to nil \(UserDefaults.standard.object(forKey: "MyDefaults"))")
UserDefaults.standard.removeObject(forKey: "MyDefaults")
print("Test C: My defaults removed \(UserDefaults.standard.object(forKey: "MyDefaults"))")
हां, कोड की दोनों लाइनें बराबर हैं, दोनों का परिणाम शून्य पढ़ा जाएगा
id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];
NSUserDefaultsयदि कुंजी नहीं मिली तो शून्य वापस कर देंगे। मैं removeObjectForKeyइसे शून्य पर सेट करने के बजाय उपयोग करने की सलाह दूंगा।
यहाँ कैसे परीक्षण करने के लिए अगर कुंजी मूल्य सेट करने के लिए कुंजी प्रविष्टि से हटा दिया है NSUserDefaults standardUserDefaults।
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] copy];
for(NSString *key in keys) {
NSLog(@"Key Name: %@", key);
}
[keys release];
या बस की कुंजी / मान शब्दकोश डंप NSUserDefaults standardUserDefaults
NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
removeObjectForKey?
setObject:nilवस्तु को हटा देगा, न कि केवल इसकी कुंजी को। तो, दोनों फ़ंक्शन समान परिणाम का कारण बनते हैं। इसके अलावा, यदि आप केवल संग्रहीत ऑब्जेक्ट (और कुंजी) को हटाते हैं (या शून्य पर सेट करते हैं), संपूर्ण .plist फ़ाइल हटा दी जाती है।
स्विफ्ट 5.0 + iOS 11 और ऊपर
दोनों विधियाँ मान निकालती हैं। एक खेल के मैदान में इस की कोशिश की:
import Foundation
let key = "Test"
let value = "test"
let defaults = UserDefaults.standard
func printUD() {
print("UserDefaults after modification:\n")
defaults.dictionaryRepresentation().forEach { print("\($0): \($1)\n") }
print("-------------\n\n")
}
defaults.set(value, forKey: key); printUD()
defaults.set(nil, forKey: key); printUD()
defaults.set(value, forKey: key); printUD()
defaults.removeObject(forKey: key); printUD()
आईओएस 11 इससे पहले परिणाम होगा serializing में nilमें Dataऔर एक त्रुटि फेंक देते हैं।