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 :)