comment enregistrer et lire de tableau de tableau dans NSUserdefaults dans swift?
J'ai besoin de créer un tableau pour ajouter des objets avec ce format comme un dictionnaire Swift : ["key1": "valeur1", "key2": "valeur2"]
Quand j'essaie de l'enregistrer avec NSUserDefaults
tout est correct, mais lors de la lecture NSUserDefaults
avec la clé de cette plante. Ce type de données n'mon var obj besoin?
let def = NSUserDefaults.standardUserDefaults()
var key = "keySave"
var element: AnyObject!
var array1: [AnyObject!] = []
array1.append(["key1": "val1", "key2": "val2"])
array1.append(["key1": "val1", "key2": "val2"])
//save
var savestring : [AnyObject!]
savestring = array1
var defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(savestring, forKey: key)
defaults.synchronize()
//read
var obj: [AnyObject!] = []
if(obj != nil){
print("size: ")
print(obj.count) //vary long value confused..
element = obj[0] //crash
print(element.objectForKey("key1"))
}
- Il ressemble à NSUserDefaults peut manipuler la Corde mais pas de Tableau et dans le Dictionnaire, ne travaillant que pour le NS* types décrivant les docs. Si cela ressemble à un bug dans Swift.
- Pour aller un peu au-delà de ce que @Zaph dit, j'ai testé avec [Chaîne] et il ne fonctionne pas, mais c'est de travailler avec [NSString]. Vérifier ma réponse.
Vous devez vous connecter pour publier un commentaire.
Lit de la question "tableau de tableau", mais je pense que la plupart des gens viennent ici juste envie de savoir comment faire pour enregistrer un tableau à
UserDefaults
. Pour ces gens, je vais ajouter quelques exemples.Tableau de chaîne de
Sauver tableau
Récupérer tableau
Tableau Int
Sauver tableau
Récupérer tableau
Bool array
Sauver tableau
Récupérer tableau
Date de la matrice de
Sauver tableau
Récupérer tableau
Tableau d'objets
Objets personnalisés (et, par conséquent, les tableaux d'objets) de prendre un peu plus de travail à économiser de
UserDefaults
. Voir les liens suivants pour savoir comment faire.Notes
??
) permet de retourner le sauvé tableau ou d'un tableau vide sans s'écraser. Cela signifie que si l'objet renvoie nul, alors la valeur à la suite de la??
opérateur sera utilisé à la place.Int
,Bool
, etDate
. J'ai aussi testé avecDouble
. Pour autant que je sais, tout ce que vous pouvez enregistrer dans une liste de propriétés fonctionne comme ceci.Juste à ajouter sur ce @Zaph dit dans les commentaires.
J'ai le même problème que vous, à savoir, le tableau de
String
n'est pas enregistré. Même si Apple ponts types tels que la Chaîne et NSString, je n'ai pas pu enregistrer un tableau de[String]
ni de[AnyObject]
.Cependant un tableau de
[NSString]
fonctionne pour moi.De sorte que votre code pourrait ressembler à ça :
Noter que j'ai créé un tableau de NSString et pas un dictionnaire. Je n'ai pas vérifier si cela fonctionne avec un dictionnaire, mais probablement vous aurez à définir les choses comme
[NSString : NSString]
d'avoir de travail.MODIFIER
Re-lecture de votre question et de votre titre, vous parlez de
array of array
. Je pense que tant que vous restez avecNSString
, un tableau de tableau de travail. Toutefois, si vous pensez que ma réponse n'est pas pertinent, faites le moi savoir dans les commentaires et je vais l'enlever.Voici un exemple de la lecture et de l'écriture d'une liste d'objets de type
SNStock
qui implémenteNSCoding
- nous avoir un accesseur pour l'ensemble de la liste,watchlist
, et deux méthodes pour ajouter et supprimer des objets, c'est-àaddStock(stock: SNStock)
etremoveStock(stock: SNStock)
.Rappelez-vous que votre objet doit implémenter
NSCoding
ou encore l'encodage ne fonctionne pas. Voici ce queSNStock
ressemble:Espérons que cette aide!
De l'essayer.
Pour obtenir les données de la UserDefaults.
Swift 4.0
Magasin:
Fetch:
************ Manière La Plus Simple ***********
Swift 5
Ensemble
Récupérer