2016-06-17 17 views
5

W tej chwili przechowuję jedną z moich klas jako NSData w paskach i oczywiście nie jest to dobry sposób na zrobienie tego.Jak przechowywać Swift Struct w danych podstawowych w systemie iOS?

Próbuję skonfigurować Core Data, ale moja klasa ma Structs. To jest to, co mam:

import Foundation 
import CoreData 

class Favourite: NSManagedObject { 
    @NSManaged var origin: Stop 

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

Ale to nie jest dobre, ponieważ mówi

nieruchomości nie mogą być oznaczone jako @NSManaged ponieważ jego typ nie może być reprezentowana w Objective-C

Ponadto jeśli ten błąd nie wystąpił, nie wiem, co ustawiłem tak jak w moim pliku xcdatamodeld.

Chyba mogę przechowywać wartości w struct i przypisać przy inicjalizacji obiektu? Czy jest to najbardziej optymalny/czysty sposób?

+2

Rozważmy przeprojektować swój model, aby włączyć struct w podmiot danych Core. – vadian

Odpowiedz

6

będę postępować tak:

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 
      } 
     } 
    } 

Bardzo interesujący artykuł, należy przeczytać: http://www.jessesquires.com/better-coredata-models-in-swift/

+0

Oto, co miałem nadzieję uniknąć, ponieważ mam kilka z tych Struktur, ale to wygląda na to, co będę musiał zrobić. Dzięki –

+0

Inną opcją jest uczynienie 'Stop' zgodnym z' NSCoding', ale to byłoby mniej więcej tym samym, nawet gdyby można to zrobić na prostej strukturze Swift. –

Powiązane problemy