【问题标题】:iPhone: Core Data save Class objectiPhone:核心数据保存类对象
【发布时间】:2010-06-14 01:59:31
【问题描述】:

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

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

【问题讨论】:

    标签: iphone core-data many-to-many mkannotation


    【解决方案1】:

    你有两个选择:

    1. 如果您的 Annotation 类符合 NSCoding 协议(或者如果您愿意编写 NSValueTransformer 将自定义类转换为 NSData 实例,则可以使用可转换属性在您的 Core Data 实体中。Core Data 将使用指定的NSValueTransformer 为您自动序列化/反序列化您的Annotation 实例。

    2. 您可以在 Core Data 模型中创建 Annotation 实体。您必须编写自己的代码以将CLLocationCoordinate2D 分配给实体。您可能会使用两个 doubles 创建持久支持,然后为 CLLocationCoordinate2D 编写设置器/访问器。

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

    【讨论】:

    • 我个人会选择第二名。
    • @mzarra 肯定知道。我个人还建议从长远来看并选择选项二。
    【解决方案2】:

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

    【讨论】:

    • 好的,但是因为我必须为 Annotation 创建属性,并且坐标类型是 CLLocationCoordinate2D,我该如何保存呢?
    猜你喜欢
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2010-12-16
    • 2017-03-09
    • 1970-01-01
    相关资源
    最近更新 更多