2016-06-17 29 views
5

Al momento sto memorizzando una delle mie classi come NSData in un plist e ovviamente non è un buon modo per farlo.Come immagazzino Swift Struct in Core Data su iOS?

Quindi sto provando a configurare i dati di base, ma la mia classe ha strutture. Questo è quello che ho:

import Foundation 
import CoreData 

class Favourite: NSManagedObject { 
    @NSManaged var origin: Stop 

    struct Stop { 
     var name: String; 
     var id: String; 
    } 
} 

Ma questo non va bene perché si dice

proprietà non può essere contrassegnato come @NSManaged perché il suo tipo non può essere rappresentato in Objective-C

Inoltre, se questo errore non si verifica, non so cosa ho impostato come nel mio file xcdatamodeld.

Immagino di poter memorizzare i valori nella struttura e assegnare all'inizializzazione dell'oggetto? È questo il modo più ottimale/pulito?

+2

Considerare di ridisegnare il proprio modello di trasformare la struct in un'entità Core Data. – vadian

risposta

6

procederò in questo modo:

import Foundation 
import CoreData 

    struct Stop { 
     var name: String; 
     var id: String; 
    } 

    class Favourite: NSManagedObject { 

     @NSManaged var name: String 
     @NSManaged var id: String 

     var stop : Stop { 
      get { 
       return Stop(name: self.name, id: self.id) 
      } 
      set { 
       self.name = newValue.name 
       self.id = newValue.id 
      } 
     } 
    } 

articolo molto interessante, si dovrebbe leggere: http://www.jessesquires.com/better-coredata-models-in-swift/

+0

Questo è quello che speravo di evitare di dover fare come ho alcuni di questi Structs, ma quello sembra essere quello che dovrò finire a fare. Grazie –

+0

L'altra opzione è quella di rendere 'Stop' conforme a' NSCoding', ma ciò equivarrebbe a più o meno la stessa cosa anche se potesse essere fatto su una semplice struttura di Swift. –