iPhone:核心数据保存类对象

iPhone:核心数据保存类对象,iphone,core-data,many-to-many,mkannotation,Iphone,Core Data,Many To Many,Mkannotation,我在核心数据中有一个称为位置的实体。在这里面我有几个字段,比如日期。但是,我还想在其中保存一个我创建的名为Annotation的类对象。因为它是我创建的自定义类对象,所以我将使用什么类型的属性 Location (object) |__ Date |__ Annotation (MKAnnotation protocol) 将类添加为核心数据类会更容易,然后您可以将两个类之间的关系作为一对一的关系。但是,您可以使用类型binary data作为属性类型,并在其中存储所需的任何数据。(我有时用它

我在核心数据中有一个称为位置的实体。在这里面我有几个字段,比如日期。但是,我还想在其中保存一个我创建的名为Annotation的类对象。因为它是我创建的自定义类对象,所以我将使用什么类型的属性

Location (object)
|__ Date
|__ Annotation (MKAnnotation protocol)

将类添加为核心数据类会更容易,然后您可以将两个类之间的关系作为一对一的关系。但是,您可以使用类型binary data作为属性类型,并在其中存储所需的任何数据。(我有时用它来存储c结构)您只需要使用NSData类来包装对象并设置属性

您有两个选择:

  • 如果您的
    注释
    类符合
    NSCoding
    协议(或者,如果您愿意编写一个
    NSValueTransformer
    来将自定义类转换为
    NSData
    实例,您可以在核心数据实体中使用可转换属性。核心数据将使用指定的
    NSValueTransformer
    为您自动序列化/反序列化
    注释
    实例。

  • 您可以在核心数据模型中创建一个
    注释
    实体。您必须编写自己的代码才能将
    CLLocationCoordinate2D
    分配给实体。您可能会使用两个
    double
    s创建一个持久性支持,然后为
    CLLocationCoordinate2D
    编写setter/accessor


  • (1)的优点是更简单(如果您的类符合
    NSCoding
    )。(2)的优点是您可以查询实体内的数据,即使使用SQLite持久存储。如果您使用(1),数据对SQLite查询引擎是不透明的,因此您无法使用SQLite后端对其进行查询。

    好的,但由于我必须为注释创建属性,并且坐标类型是CLLocationCoordinate2D,我如何保存它?我个人会选择第二个。而@mzarra肯定知道。我个人也会重新选择建议采取长远的眼光,选择第二种选择。