我在核心数据中有一个名为 Location 的实体。在这里面我有几个字段,比如日期。但是,我还想在其中保存一个我创建的名为 Annotation 的类对象。我将为此使用什么类型的属性,因为它是我创建的自定义类对象?
Location (object)
|__ Date
|__ Annotation (MKAnnotation protocol)
我在核心数据中有一个名为 Location 的实体。在这里面我有几个字段,比如日期。但是,我还想在其中保存一个我创建的名为 Annotation 的类对象。我将为此使用什么类型的属性,因为它是我创建的自定义类对象?
Location (object)
|__ Date
|__ Annotation (MKAnnotation protocol)
你有两个选择:
如果您的Annotation
类符合NSCoding
协议(或者如果您愿意编写一个NSValueTransformer
将您的自定义类转换为NSData
实例,您可以在您的核心数据实体中使用可转换属性。核心数据将使用指定NSValueTransformer
的自动序列化/反序列化您的Annotation
给你的例子。
你可以在你的核心数据模型中创建一个Annotation
实体。您必须编写自己的代码才能将 a 分配CLLocationCoordinate2D
给实体。您可能会使用两个double
s 创建一个持久支持,然后为CLLocationCoordinate2D
.
(1) 的优点是它更容易(如果你的类符合NSCoding
)。(2) 的优点是您可以查询实体中的数据,即使使用 SQLite 持久存储也是如此。如果使用 (1),则数据对 SQLite 查询引擎是不透明的,因此您将无法使用 SQLite 后端对其进行查询。
将类添加为核心数据类会更容易,然后您可以将两个类之间的关系作为一对一的关系。但是,您可以将类型二进制数据用作属性类型并在其中存储您想要的任何数据。(我有时用它来存储 c 结构)你只需要使用 NSData 类来包装你的对象并设置属性。