我不确定如何维护我的核心数据实体与创建实体并将其提交到数据库时实例化的某些对象之间的双向关系。
我有很多子类化的MKAnnotation对象,它们与实体有一对一的关系。每次我的fetchedResultsController执行新的提取时,我假设释放前一次提取的结果,并且在内存中重新映射所提取的NSManagedObjects。所以我的一对一关系破裂了。如果我可以在核心数据中保存指向MKAnnotation对象的指针,那将解决问题的一半(一个方向上的关系)。这有意义吗?你会怎么做?
我在重新启动应用程序时删除了所有核心数据内容,因此关系信息的长期持久性不是我所关注的问题。
答案 0 :(得分:0)
混合指针和托管对象通常是徒劳的,因为核心数据有很多优化,直接内存管理几乎是不可能的,例如物体可能会恢复故障。
你真的是以错误的方式解决这个问题。 Core Data主要不是持久性API,它是一种数据建模API,旨在提供模式 - 视图 - 控制器设计应用程序的完整模型层。因此,您可以使用它而不保存任何东西。如果您正在使用Core Data并且您拥有地图注释等数据,则应在Core Data中对注释进行建模。这样做会简化一切。
由于没有MSAnnotation类而只有MKAnnotation协议,因此在这种情况下最简单的解决方案是创建一个实现MKAnnotation协议的NSManagedObject类。您可以将CLLocationCoordinate2D
等位置数据转换为NSValues或更好,只需为它们创建属性。由于该类实现了协议,因此您可以将托管对象传递给传递任何协议对象的任何位置。