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