2016-06-17 10 views
5

現時点では、私のクラスの1つをNSDataとしてplistに格納していますが、明らかにそうするのは良い方法ではありません。iOSのコアデータにSwift Structを保存するにはどうすればよいですか?

私は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

は、コアデータのエンティティに構造体を回すためにあなたのモデルを再設計することを検討してください。 – 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構造体でも同じことができます。 –

関連する問題