ios swift tableview nsuserdefaults

ios - (Swift) Almacenar y recuperar Array en NSUserDefaults



tableview (7)

¿Qué estás almacenando en la matriz?

Si son objetos, no funcionará, si son solo cadenas o números, entonces debería estar bien.

Los siguientes pasos que debe seguir deben ser activar puntos de interrupción de excepción y quizás imprimir todo () todo lo que pueda para que pueda determinar el paradero exacto del problema.

Como una toma en la oscuridad, sugeriría que tal vez (identity.text!) Salga como nulo

También probablemente deberías cambiarlo a esto

if let tabledata: NSArray = NSUserDefaults.standardUserDefaults().stringForKey("/(identity.text!)listA"){ myArray = [tabledata!] tableView.reloadData() }

Esto hará que el código ni siquiera intente ejecutarse a menos que haya un valor que pueda usar

Estoy tratando de almacenar una matriz en NSUserDefaults y recuperar la matriz cuando sea necesario para completar un UITableView .

Actualmente estoy usando:

//store data NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "/(identity.text!)listA") NSUserDefaults.standardUserDefaults().synchronize() //retrieve data let tabledata = NSUserDefaults.standardUserDefaults().stringForKey("/(identity.text!)listA") myArray = [tabledata!] tableView.reloadData()

Pero consigo

error fatal: inesperadamente encontrado nil al desenvolver un valor opcional

al intentar cargar los datos. No estoy seguro de si el problema está en el almacenamiento o la recuperación. ¿Alguien ha pasado por esto antes?


De su código, veo que está almacenando una matriz

// Your code NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "/(identity.text!)listA")

y recuperar una cadena

//Your code let tabledata = NSUserDefaults.standardUserDefaults().stringForKey("/(identity.text!)listA")

Probablemente hay una falta de coincidencia de tipo. Usted almacena un tipo y recupera otro tipo.

Mientras recupera, use arrayForKey() u objectForKey() vea el código a continuación.

let tabledata = NSUserDefaults.standardUserDefaults().arrayForKey("/(identity.text!)listA")

o

let tabledata = NSUserDefaults.standardUserDefaults().objectForKey("/(identity.text!)listA")

Si es una matriz, iría con la primera.


Esta es la forma en que puede almacenar y recuperar una matriz de objetos con la ayuda de NSKeyArchive .

Para almacenar la matriz en NSUserDefault.

let array = ["horse", "cow", "camel", "sheep", "goat"] let defaults = UserDefaults.standard defaults.set(array, forKey: "SavedStringArray")

A la matriz recuperada de NSUserDefault.

let defaults = UserDefaults.standard let array = defaults.object(forKey: "SavedStringArray") as? [String] ?? [String]()

Espero que esto te ayude.


Esto se ha cambiado en Swift 3. Tenga en cuenta que esto funciona con el dispositivo pero no con el patio de juegos o el simulador

//store the array let array = ["horse", "cow", "camel", "sheep", "goat"] let defaults = UserDefaults.standard defaults.setValue(array, forKey: "history") defaults.synchronize() //Retrieve the array if((UserDefaults.standard.array(forKey: "history")) != nil){ let historyWords = (UserDefaults.standard.array(forKey: "history") as? [String])! print(historyWords) }


Llegué a esta pregunta buscando cómo guardar una matriz de cadenas en UserDefaults pero no encontré una respuesta clara aquí. Sin embargo, encontré la respuesta en Cómo guardar la configuración del usuario usando NSUserDefaults . Lea ese artículo para más información.

Guardar y recuperar una matriz de cadenas en UserDefaults

Guardar matriz

let placesData = NSKeyedArchiver.archivedData(withRootObject: placesArray) UserDefaults.standard.set(placesData, forKey: "places")

Recuperar matriz

let placesData = UserDefaults.standard.object(forKey: "places") as? NSData if let placesData = placesData { let placesArray = NSKeyedUnarchiver.unarchiveObject(with: placesData as Data) as? [Place] print(placesArray) }


Almacenar en el valor predeterminado del usuario:

let arrayFruit = ["Apple","Banana","Orange","Grapes","Watermelon"] //store in user default UserDefaults.standard.set(arrayFruit, forKey: "arrayFruit")

Recuperando la matriz de los valores predeterminados del usuario:

if let arr = UserDefaults.standard.array(forKey: "arrayFruit") as? [String]{ print(arr) }


La última versión de swift3 para almacenar una matriz de datos en los valores predeterminados del usuario y obtener esa matriz de datos usando claves

let nameArray = ["Ramu","JAGAN","Steve","Swift"] let namesArrayData = NSKeyedArchiver.archivedData(withRootObject: nameArray) UserDefaults.standard.set(namesArrayData, forKey: "arrayData")

RetriveData

let retriveArrayData= UserDefaults.standard.object(forKey: "arrayData") as? NSData if let retriveArrayData= namesArrayData{ let retriveArray = NSKeyedUnarchiver.unarchiveObject(with: namesArraydata as Data) as? [nameArray] print(retriveArray ) }