standard ios swift nsuserdefaults

ios - standard - user preferences swift



Eliminar valores clave para NSUserDefaults en Swift (10)

¿Cómo borrar datos de NSUserDefaults? Hay bastantes respuestas sobre cómo hacerlo en el Objetivo C, pero ¿qué tal Swift? Así que intenté esto:

let defaults = NSUserDefaults.standardUserDefaults() defaults.removeObjectForKey("myKey")

No funciono Tal vez lo que realmente quiero eliminar no es NSUserDefaults? Así es como guardo los datos:

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") } }

EDITAR: Solo para borrar algunas cosas, los datos que se están guardando son pequeños (ni siquiera cerca de 100kb)

Y tal vez estoy guardando datos no en NSUserDefaults (soy nuevo en programación), así es como lo obtengo (carga):

let defaults = NSUserDefaults.standardUserDefaults() if let savedData = defaults.objectForKey("myData") as? NSData { myData = NSKeyedUnarchiver.unarchiveObjectWithData(savedData) as! [UserLogin] }


El código que ha escrito funcionará bien, pero NSUserDefaults se sincroniza en cierto intervalo de tiempo.

Como quiera, eso debería reflejarse en NSUserDefaults inmediatamente, por lo que debe escribir sincronizar

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


Eliminando UserDefaults para la clave en swift 3, según la respuesta principal, sintaxis ligeramente diferente:

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


Me gustaría una solución que establezca el valor en nil para una clave .

Swift 3

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

Swift 2.x

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

NOTA: esa es una declaración clara y directa, pero tenga en cuenta que hay un límite para almacenar información en NSUserDefaults , definitivamente no es el lugar adecuado para almacenar archivos binarios grandes (como por ejemplo, imágenes), para eso hay una carpeta Documents . sin embargo, no está definido el tamaño de la var image: String que usted codifica / decodifica.


Para destruir todas UserDefaults claves de UserDefaults , puede usar el siguiente código en Swift 3.x:

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


Prueba esto

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

para Swift 3

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

Pero esto borrará todos los valores de NSUserDefaults.careful mientras se usa.


Utilice lo siguiente para bucle:

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


removeObjectForKey es el camino correcto a seguir.
Esto eliminará el valor de la clave seleccionada. El siguiente código establece un valor de cadena para una clave en NSUserDefaults, lo imprime y luego usa removeObjectForKey para eliminar e imprimir el valor clave nuevamente. Después de removeObjectForKey el valor es 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)")

Devoluciones:

Valor Clave no establecido nil

Valor Clave Opcional ("HOLA MUNDIAL")

Valor clave después de eliminar nil

Actualizar Swift 3:

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


Código de actualización para Swift: se utiliza debajo de la línea de código para eliminar valores clave para NSUserDefaults en Swift

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


Swift 4.x Eliminar todas las claves en UserDefaults

let defaults = UserDefaults.standard let dictionary = defaults.dictionaryRepresentation() dictionary.keys.forEach { key in defaults.removeObject(forKey: key) }


func remove_pref(remove_key : String){ UserDefaults.standard.removeObject(forKey: remove_key) UserDefaults.standard.synchronize() }