回答:
Swift 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"))")
はい、両方のコード行は同等です。両方ともnil読み取りになります
id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];
NSUserDefaults
キーが見つからなかった場合はnilを返します。removeObjectForKey
nilに設定する代わりにを使用することをお勧めします。
ここでは、キー値をnilに設定してキーエントリをから削除したかどうかをテストする方法を説明し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
するために、キーだけでなくオブジェクトも削除します。したがって、どちらの関数もまったく同じ結果になります。また、保存されているオブジェクト(およびキー)のみを削除(またはnilに設定)すると、.plistファイル全体が削除されます。
Swift 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()
iOS 11より前のバージョンでは、シリアルnil
化されData
てエラーがスローされます。