2017-02-05 7 views
0

Когда я пытаюсь сохранить данные во время использования приложения после перезапуска, я обнаружил ошибку при сохранении в NSUserDefault, который я не могу сохранить непосредственно с помощью Structs, в соответствии с тем, что я читаю NSUserDefaults, можно сохранить только небольшой набор типов: NSData, NSString, NSNumber, NSDate, NSArray, содержащие только эти типы, или NSDictionary, содержащие только эти типы, но я нашел некоторые формы на C, с которыми я не знаком, а некоторые в Swift, но я не совсем понимаю, кроме того, что я не может найти способ сделать это с конструкцией «Carreras», встроенной в конструкцию «CursosG». Я ищу эффективный способ, чтобы иметь возможность запускать это в Swift 3. Это мой код:Сохранить массив Struct в NSUserDefault Swift 3?

struct CursosG { 
    let id: Int 
    let nrc: String 
    let profesor: String 
    let carreras: [Carreras] 
    let dia: String 
    let bloque: String 
    let sala: String 
    let idcurso: Int 
    let comentario: String 
    let curso: String 

    init(id: Int, nrc: String, profesor: String, carreras: [Carreras], dia: String, bloque: String, sala: String, idcurso: Int, comentario: String, curso: String) { 
     self.id = id 
     self.nrc = nrc 
     self.profesor = profesor 
     self.carreras = carreras 
     self.dia = dia 
     self.bloque = bloque 
     self.sala = sala 
     self.idcurso = idcurso 
     self.comentario = comentario 
     self.curso = curso 
    }  

    struct Carreras { 
     let id: Int 
     let nombre: String 
     let semestre: Int 

     init(id: Int, nombre: String, semestre: Int) { 
      self.id = id 
      self.nombre = nombre 
      self.semestre = semestre 
     } 
    } 
} 

... 

var CursoAllG = [CursoG]() 

... 

let curso = CursosG(id: idT, nrc: nrcT, profesor: profesorT, carreras: carrers as! [CursosG.Carreras], dia: diaT, bloque: bloqueT, sala: salaT, idcurso: idcursoT, comentario: comentarioT, curso: cursoT) 
CursosAllG.append(curso) 

... 

UserDefaults.standard.set(CursosAllG, forKey: "cursosAllG") 

Как я должен преобразовать-структуру?

+0

Вы думали о CoreData, а не о UserDefaults? Хранение объектов в UserDefaults может быть беспорядочным, и CoreData не предназначен для хранения нескольких объектов одного типа (если вы хотите сохранить 10+ объектов CursoG). Хотя вы можете сериализовать CursoG и Carrera для хранения в UserDefaults, это может быть не самый лучший способ в зависимости от ваших требований. –

ответ

0

Вам необходимо преобразовать данные структуры в NSData, а затем вы сможете его сохранить. Вот ссылка, которая описывает это Structs to NSData to Structs?

Однако я по-прежнему чувствую, что вы должны использовать словарь вместо использования структур, поскольку он поддерживает кросс-платформу.

Смежные вопросы