NSUserDefaultsからデータを削除する方法は? Objective Cでそれを行う方法についてはかなりの回答がありますが、Swiftはどうですか?だから私はこれを試しました:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey")
うまくいきませんでした。たぶん私が本当に削除したいのはNSUserDefaultsではないでしょうか?これは私がデータを保存する方法です:
class MySavedData: NSObject, NSCoding {
var image: String
init(name: String, image: String) {
self.image = image
}
required init(coder aDecoder: NSCoder) {
image = aDecoder.decodeObjectForKey("image") as! String
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(image, forKey: "image")
}
}
class ViewController: <...> {
var myData = [MySavedData]() //Later myData gets modified and then function save() is called
func save() {
let savedData = NSKeyedArchiver.archivedDataWithRootObject(myData)
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(savedData, forKey: "myKey")
}
}
編集:いくつかのことをクリアするために-保存されているデータは小さい(100kbにも近くない)
そして、多分私はNSUserDefaultsにデータを保存していません(私はプログラミングに不慣れです)。
let defaults = NSUserDefaults.standardUserDefaults()
if let savedData = defaults.objectForKey("myData") as? NSData {
myData = NSKeyedUnarchiver.unarchiveObjectWithData(savedData) as! [UserLogin]
}
removeObjectForKeyが正しい方法です。
これにより、選択したキーの値が削除されます。次のコードは、NSUserDefaultsのキーに文字列値を設定し、それを印刷してから、removeObjectForKeyを使用して、キー値を削除して再度印刷します。 removeObjectForKeyの後、値はnilです。
let prefs = NSUserDefaults.standardUserDefaults()
var keyValue = prefs.stringForKey("TESTKEY")
print("Key Value not set \(keyValue)")
let strHello = "HELLO WORLD"
prefs.setObject(strHello, forKey: "TESTKEY")
keyValue = prefs.stringForKey("TESTKEY")
print("Key Value \(keyValue)")
prefs.removeObjectForKey("TESTKEY")
keyValue = prefs.stringForKey("TESTKEY")
print("Key Value after remove \(keyValue)")
返却値:
キー値がnilに設定されていません
キー値オプション(「HELLO WORLD」)
削除後のキー値nil
let prefs = UserDefaults.standard
keyValue = prefs.string(forKey:"TESTKEY")
prefs.removeObject(forKey:"TESTKEY")
作成したコードは正常に機能しますが、NSUserDefaultsは特定の時間間隔で同期します。
NSUserDefaultsにすぐに反映する必要があるため、synchroniseと記述する必要があります。
let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey")
defaults.synchronize()
これを試して
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
Swift 3の場合
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
ただし、これにより、使用中にNSUserDefaults.carefulからすべての値がクリアされます。
valueをnil
にkey。
UserDefaults.standard.set(nil, forKey: "key")
NSUserDefaults.standardUserDefaults().setValue(nil, forKey: "key")
注:これは明確でストレートなステートメントですが、NSUserDefaults
に情報を保存するのに制限があることを忘れないでください。間違いなくnot大きなバイナリファイル(画像など)を保存する場所–そのためにDocuments
フォルダーがあります。ただし、エンコード/デコードするvar image: String
の大きさは定義されていません。
Swift 4.x UserDefaultsのすべてのキーを削除
let defaults = UserDefaults.standard
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach
{ key in defaults.removeObject(forKey: key)
}
次のforループを使用します。
for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}
上の答えに基づいて、Swift 3のキーのUserDefaultsを削除します。構文はわずかに異なります。
UserDefaults.standard.removeObject(forKey: "doesContractExist")
すべてのUserDefaults
キーを無効にするには、Swift 3.xで次のコードを使用できます。
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
func remove_pref(remove_key : String){
UserDefaults.standard.removeObject(forKey: remove_key)
UserDefaults.standard.synchronize()
}
Swiftのコードを更新します:コード行の下でキー値を削除するために使用SwiftのNSUserDefaults
UserDefaults.standard.setValue(nil, forKey: "YouEnterKey")