2016-06-17 3 views
5

В настоящий момент я сохраняю один из своих классов как NSData в plist и, очевидно, это не очень хороший способ сделать это.Как сохранить Swift Struct в Core Data на iOS?

Так что я пытаюсь настроить Core Data, но у моего класса есть Structs. Это то, что у меня есть:

import Foundation 
import CoreData 

class Favourite: NSManagedObject { 
    @NSManaged var origin: Stop 

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

Но это не хорошо, потому что он говорит

Свойство не может быть помечено как @NSManaged, потому что его тип не может быть представлена ​​в Objective-C

Кроме того, если эта ошибка не произошла, я не знаю, что бы я установил, как в моем файле xcdatamodeld.

Я думаю, я мог бы хранить значения в структуре и назначать при инициализации объекта? Это самый оптимальный/чистый способ?

+2

Рассмотрим перепроектировать модели, чтобы превратить-структуру в сущности Core Data. – vadian

ответ

6

я приступаю так:

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

Очень интересная статья, вы должны прочитать: http://www.jessesquires.com/better-coredata-models-in-swift/

+0

Это то, чего я надеялся избежать, потому что у меня есть несколько из этих Structs, но это похоже на то, что мне придется делать. Спасибо –

+0

Другой вариант - сделать 'Stop' совместимым с' NSCoding', но это будет более или менее одинаковым, даже если это можно сделать на простой структуре Swift. –

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