Location というコア データにエンティティがあります。この中には、日付などのいくつかのフィールドがあります。しかし、Annotation という名前で作成したクラス オブジェクトも保存したいと思います。これは私が作成したカスタム クラス オブジェクトなので、どのタイプの属性を使用すればよいでしょうか?
Location (object)
|__ Date
|__ Annotation (MKAnnotation protocol)
Location というコア データにエンティティがあります。この中には、日付などのいくつかのフィールドがあります。しかし、Annotation という名前で作成したクラス オブジェクトも保存したいと思います。これは私が作成したカスタム クラス オブジェクトなので、どのタイプの属性を使用すればよいでしょうか?
Location (object)
|__ Date
|__ Annotation (MKAnnotation protocol)
次の 2 つのオプションがあります。
クラスがプロトコルAnnotation
に準拠している場合(または、カスタム クラスをインスタンスに変換する を作成する場合は、Core Data エンティティで変換可能な属性を使用できます。Core Data は、指定された を使用して自動的にシリアル化/逆シリアル化しますあなたのためのインスタンス。NSCoding
NSValueTransformer
NSData
NSValueTransformer
Annotation
Annotation
Core Data モデルでエンティティを作成できます。CLLocationCoordinate2D
をエンティティに割り当てるには、独自のコードを記述する必要があります。おそらく、2 つdouble
の を使用して永続的なバッキングを作成し、CLLocationCoordinate2D
.
(1) の利点は、(クラスが に準拠している場合NSCoding
) 簡単であることです。(2) の利点は、SQLite 永続ストアを使用している場合でも、エンティティ内のデータに対してクエリを実行できることです。(1) を使用すると、データは SQLite クエリ エンジンに対して不透明になるため、SQLite バックエンドでクエリを実行することはできません。
クラスをコア データ クラスとして追加する方が簡単で、2 つのクラス間の関係を 1 対 1 の関係にすることができます。ただし、タイプ バイナリ データを属性タイプとして使用し、そこに必要なデータを格納することができます。(私は時々これを使用して c 構造体を格納します) NSData クラスを使用してオブジェクトをラップし、プロパティを設定するだけです。