2015-01-28 41 views
5

Questo è un array:Come si salva un array Int in Swift usando NSUserDefaults?

var myArray = [1] 

Contiene Int valori.

Ecco come salvare un array in NSUserDefaults. Questo codice sembra funzionare bene:

NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "myArray") 

Così ho caricare un array:

myArray = NSUserDefaults.standardUserDefaults().objectForKey("myArray") 

Il codice sopra, però, recupera un errore. Perché?

+0

Quale errore si ottiene? Un errore del compilatore? Errore di runtime? Sarebbe utile una descrizione esatta del problema. –

+0

Stavo ricevendo un errore del compilatore. Non ricordo cosa stesse dicendo esattamente l'errore perché la risposta di Dániel ha risolto parzialmente il mio problema. Grazie! – Cesare

risposta

5

Si vuole assegnare un AnyObject? ad una serie di Int s, Allucinante objectForKey rendimenti AnyObject?, così si dovrebbe gettarlo ai matrice in questo modo:

myArray = NSUserDefaults.standardUserDefaults().objectForKey("myArray") as [Int] 

Se non ci sono valori salvati in precedenza, che poteva restituire nil, così si potrebbe verificare con:

if let temp = NSUserDefaults.standardUserDefaults().objectForKey("myArray") as? [Int] { 
    myArray = temp 
} 
+0

Grazie per aver risposto alla mia domanda! Sto ottenendo questo errore: 'Trovato inaspettatamente nullo durante lo srotolamento di un valore facoltativo'. Se commento il tuo codice, però, tutto sembra funzionare correttamente. A cosa potrebbe essere dovuto? Grazie! – Cesare

+0

@ CeceXX Ho modificato la mia risposta. –

+0

Dovrei usare 'objectForKey' o' arrayForKey '? Si noti che l'ho salvato usando 'setObject'. – Cesare

3

si dovrebbe usare if let a scartare il vostro valore opzionale ed anche un cast condizionale. Dal modo in cui si dovrebbe anche usare arrayForKey come segue:

if let myLoadedArray = UserDefaults.standard.array(forKey: "myArray") as? [Int] { 
    print(myLoadedArray) 
} 

Oppure utilizzare l'operatore coalescenza nil ??:

let myLoadedArray = UserDefaults.standard.array(forKey: "myArray") as? [Int] ?? [] 
0

Swift 4:

myArray : [Int] = UserDefaults.standard.object(forKey: "myArray") as! [Int] 
Problemi correlati