web-dev-qa-db-ja.com

SwiftのNSUserDefaultsのキー値を削除します

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]
    }
34
Xernox

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

更新Swift 3:

let prefs = UserDefaults.standard
keyValue = prefs.string(forKey:"TESTKEY")
prefs.removeObject(forKey:"TESTKEY")
70
greentor

作成したコードは正常に機能しますが、NSUserDefaultsは特定の時間間隔で同期します。

NSUserDefaultsにすぐに反映する必要があるため、synchroniseと記述する必要があります。

let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("myKey") 
defaults.synchronize()
14
sourav

これを試して

NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)

Swift 3の場合

UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)

ただし、これにより、使用中にNSUserDefaults.carefulからすべての値がクリアされます。

10
Avijit Nagare

valuenilkey

スイフト3

UserDefaults.standard.set(nil, forKey: "key")

Swift 2.x

NSUserDefaults.standardUserDefaults().setValue(nil, forKey: "key")

注:これは明確でストレートなステートメントですが、NSUserDefaultsに情報を保存するのに制限があることを忘れないでください。間違いなくnot大きなバイナリファイル(画像など)を保存する場所–そのためにDocumentsフォルダーがあります。ただし、エンコード/デコードするvar image: Stringの大きさは定義されていません。

4
holex

Swift 4.x UserDefaultsのすべてのキーを削除

let defaults = UserDefaults.standard
let dictionary = defaults.dictionaryRepresentation()

    dictionary.keys.forEach 
    { key in   defaults.removeObject(forKey: key)
    }
3
Kandhal Bhutiya

次のforループを使用します。

for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
   NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}
2
Gaurav Gudaliya

上の答えに基づいて、Swift 3のキーのUserDefaultsを削除します。構文はわずかに異なります。

UserDefaults.standard.removeObject(forKey: "doesContractExist")
2
Daniel Jones

すべてのUserDefaultsキーを無効にするには、Swift 3.xで次のコードを使用できます。

UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
0
Adrian
func  remove_pref(remove_key : String){
    UserDefaults.standard.removeObject(forKey: remove_key)
    UserDefaults.standard.synchronize()
}
0
Softlabsindia

Swiftのコードを更新します:コード行の下でキー値を削除するために使用SwiftのNSUserDefaults

UserDefaults.standard.setValue(nil, forKey: "YouEnterKey")
0
Kiran jadhav