【问题标题】:Core Data entity with properties that point to objects具有指向对象的属性的核心数据实体
【发布时间】:2011-08-23 17:16:00
【问题描述】:

我不确定如何在我的核心数据实体和一些在创建实体并将其提交到数据库时实例化的对象之间保持双向关系。

我有许多与实体一对一关系的子类 MKAnnotation 对象。每次我的 fetchedResultsController 执行新的提取时,我假设先前提取的结果被释放并且提取的 NSManagedObjects 被重新映射到内存中。所以我的一对一关系被打破了。如果我可以在核心数据中保存指向 MKAnnotation 对象的指针,那将解决一半的问题(一个方向的关系)。这有意义吗?你会怎么做呢?

我在应用程序重新启动时删除了所有核心数据内容,因此关系信息的长期持久性不是我关心的问题。

【问题讨论】:

    标签: core-data entity-relationship mkannotation


    【解决方案1】:

    混合指针和托管对象通常是徒劳的,因为 Core Data 有很多优化,直接内存管理几乎是不可能的,例如一个对象可能会恢复为故障。

    你真的走错了路。 Core Data 主要不是一个持久性 API,它是一个数据建模 API,旨在提供模式-视图-控制器设计应用程序的完整模型层。因此,您可以在不保存任何内容的情况下使用它。如果你使用 Core Data 并且你有地图标注等数据,标注应该在 Core Data 中建模。这样做会简化一切。

    由于没有 MSAnnotation 类而只有一个 MKAnnotation 协议,因此在这种情况下最简单的解决方案是创建一个实现 MKAnnotation 协议的 NSManagedObject 类。您可以将CLLocationCoordinate2D 之类的位置数据转换为 NSValue,或者更好,只需为它们创建属性即可。由于该类实现了协议,因此您可以在传递任何协议对象的任何地方传递托管对象。

    【讨论】:

    • 我想我明白你在说什么。我将在托管对象实体中将 MKAnnotation 属性实现为瞬态属性。我看到实际地图注释视图根据需要进行了更新,并且已经有了我正在寻找的绑定。我对实现 trsnsient 属性有一些疑问,但我已将它们发布在另一个问题中。
    • 如果您实际上不需要建模或保留 MKAnnotation 属性,您可以将它们添加为自定义 NSManagedObject 子类的未建模属性。未建模的属性是在类中找到的属性,而不是在实体中找到的属性。托管对象上下文会忽略它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多