ios uitableview swift2 nsuserdefaults nsindexpath

ios - Cómo agregar NSIndexPath a NSUserDefaults en swift



uitableview swift2 (3)

Como se menciona por los otros, NSIndexPath no cumple con la lista de propiedades.

Una solución es usar esta extensión simple de NSUserDefaults para guardar NSIndexPath como una matriz de dos enteros

extension NSUserDefaults { func indexPathForKey(key : String) -> NSIndexPath? { guard let indexArray = arrayForKey(key) as? [Int] else { return nil } return NSIndexPath(forRow: indexArray[0], inSection: indexArray[1]) } func setIndexPath(indexPath : NSIndexPath, forKey key: String) { setObject([indexPath.row, indexPath.section], forKey:key) } }

Estoy tratando de guardar NSIndexPath en NSUserDefaults , pero obtuve la siguiente excepción: -

Intentar establecer un objeto de lista no de propiedad {length = 2, path = 0 - 12} como un valor NSUserDefaults / CFPreferences para la clave LastSelectedIndeX

Mi código:-

let selectedIndexPath = tableView.indexPathForSelectedRow NSUserDefaults.standardUserDefaults().setObject(selectedIndexPath, forKey: "lastSelectedIndex") NSUserDefaults.standardUserDefaults().synchronize()

Entonces, ¿cómo puedo guardar NSIndexPath para poder usarlo más adelante en otro controlador de vista?


No puede guardar directamente indexPath en NSUserDefault. Puede almacenar NSArray, NSDictionary, NSNumber, NSString y NSDictionary en NSUserDefault.

Tienda IndexPath usando NSKeyedArchiver :

let data = NSKeyedArchiver.archivedDataWithRootObject(selectedIndexPath) NSUserDefaults.standardUserDefaults().setObject(data, forKey: "indexKey")

Obtenga IndexPath usando NSKeyedArchiver :

let data1 = NSUserDefaults.standardUserDefaults().objectForKey("indexKey") as? NSData let indexP1 = NSKeyedUnarchiver.unarchiveObjectWithData(data1!) as! NSIndexPath


Puedes hacer algo como esto,

Guardar como,

var myDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() var indexPath: NSIndexPath = self.myTableView.indexPathForSelectedRow var data: NSData = NSKeyedArchiver.archivedDataWithRootObject(indexPath) myDefaults["lastSelectedIndex"] = myDefaults

Recuperar como,

var data2: NSData = myDefaults.dataForKey("lastSelectedIndex") var indexPath2: NSIndexPath = NSKeyedUnarchiver.unarchiveObjectWithData(data2)

Tienes que convertir la ruta de índice a los datos y luego puedes guardarla y recuperarla.

Espero que esto ayude :)