Guardar una matriz para archivar en Swift

Estoy construyendo una aplicación que:

  1. Comprobar connection a internet;
  2. Recibir el file JSON del server y almacenar los datos en el file si el server es accesible;
  3. Lea desde el file si la connection al server está inactiva.

En este momento, conseguí implementar la comprobación de connection, recibiendo JSON, poniendo datos en array.

Received JSON se ve así:

introduzca la descripción de la imagen aquí

Luego estoy usando la siguiente paz de código para crear una matriz de dictionarys para almacenar datos JSON. Se eligió una matriz de dictionarys para poder filtrarla y luego usar las teclas de valores para alcanzar valores.

var rates = [ExchangeRates]() //instance of class Rate var bnkDct = ["bank": "", "currency": "","buyrate": "", "sellrate": ""] //template var indx : Int = 0 //index for iteration for rate in jsonData{ let rate = ExchangeRates(data: rate as! NSDictionary) rates.append(rate) bnkDct["bank"] = rates[indx].bank bnkDct["buyrate"] = rates[indx].buyRate bnkDct["sellrate"] = rates[indx].sellRate bnkDct["currency"] = rates[indx].currency self.bankDict.append(bnkDct) indx += 1 } 

Después de esto, tengo una matriz que se parece a:

introduzca la descripción de la imagen aquí

Ahora me gustaría save esta matriz en un file y, obviamente, poder leerla.

Estaba tratando de escribir datos usando algo como esto:

  let filePath = NSTemporaryDirectory() + "MyData.dat" self.bankDict.writeToFile(filePath, automatically: true) 

Pero me da un error: "[(Diccionario)] no tiene miembro writeToFile".

También no puedo convertirlo como NSDictionary para usar el mismo método writeToFile .

También estaba tratando de escribir datos usando algo como esto:

  let filePath = NSTemporaryDirectory() + "MyData.dat" NSKeyedArchiver.archiveRootObject(self.bankDict, toFile: filePath) 

Crea un file con una encoding extraña:

introduzca la descripción de la imagen aquí

Y cuando trato de leerlo:

  let newDictionary = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as! [Dictionary <String,AnyObject> ] 

Recibo el error: "error fatal: inesperadamente encontrado nil mientras desenvolvió un valor opcional"

También el depurador muestra una cosa muy "interesante":

introduzca la descripción de la imagen aquí

newDictionary tiene un billón de valores. Había 40 dictionarys en la matriz que se escribió en un file.

¿Alguien puede aconsejar lo que estoy haciendo mal aquí o tal vez estoy usando malas prácticas haciendo algo aquí?

No puede usar los methods array o dictionary writeToFile a less que cada object en su gráfico de object sea un object de list de properties. (Una pequeña list de types. Búsquelo.)

Tiene una class personalizada, ExchangeRates, en su matriz.

De forma similar, no puede save un file con NSKeyedArchiver a less que cada object en su gráfico de object cumpla con el protocolo NSCoding. Si agrega compatibilidad para NSCoding a su class ExchangeRates, su segundo método funcionará, pero el contenido del file no será legible para el ser humano.