2011-08-23 101 views
1

我不知道如何在创建实体并将其提交到数据库时如何保持我的核心数据实体与实例化的某些对象之间的双向关系。具有指向对象的属性的核心数据实体

我有许多subclassed MKAnnotation对象与实体的一对一的关系。每当我的fetchedResultsController执行一个新的读取操作时,我都会假设前一个读取的结果被释放,并且获取的NSManagedObjects被重新映射到内存中。所以我的一对一关系被打破了。如果我可以在核心数据中保存一个指向MKAnnotation对象的指针,这将解决一半的问题(一个方向上的关系)。这有意义吗?你会如何做到这一点?

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

回答

0

混合指针和管理对象通常是徒劳的,因为核心数据有很多优化,直接内存管理几乎不可能,例如,一个对象可能会回到故障。

你真的是这样做的错误方式。核心数据主要不是持久性API,它是一个数据建模API,旨在提供模式 - 视图 - 控制器设计应用程序的完整模型层。因此,您可以在不保存任何内容的情况下使用它。如果您使用的是核心数据,并且您有数据(如地图注记),则应在核心数据中对注记进行建模。这样做会简化一切。

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

+0

我想我明白你在说什么。我将在管理对象实体中将MKAnnotation属性实现为临时属性。我发现actaul map注释视图根据需要进行了更新,并且已经具有我正在寻找的绑定。我有一些关于实现trsnsient属性的问题,但我已经在另一个问题中发布了它们。 – Jim

+0

如果您实际上不需要建模或保留MKAnnotation属性,则可以将它们添加为自定义NSManagedObject子类的未建模属性。未建模的属性是在类中找到的属性,但不是实体。托管对象上下文忽略它们。 – TechZen

相关问题