核心数据 - 将实体名称或引用传递给整个实体?

时间:2015-03-24 01:27:23

标签: ios core-data nsfetchedresultscontroller magicalrecord

我制作一个简单的银行帐户跟踪器,用于自我教学目的。我使用Core Data存储三个实体,如屏幕截图所示:

enter image description here

WMMGTransaction对象只是在记录时存储,并根据需要提取以提供表视图和详细视图。这将通过NSFetchedResultsController和谓词来完成。如果重要的话,我正在使用MagicalRecord访问核心数据。

我的问题是:

当我将WMMGAccount数据从一个VC传递到另一个VC时,例如创建新帐户时,或者从列表中选择一个(通过委托作为规则)时,如果我将引用传递给整个实体,或者我可以使用NSString一个.name帐户,并在需要时使用谓词和NSFetchedResultsController标识帐户?我想这是一个策略问题,可能会产生讨论,而不是一个简单而干燥的答案,但我正在与它搏斗,所以我想我会问。

1 个答案:

答案 0 :(得分:1)

听起来你在问是否应该将一个对象传递给需要它的代码,或者你是否应该传递可用于再次查找同一个对象的信息。

除非您需要在不同的线程或队列上使用托管对象,否则应始终传递实际对象。没有意义重新获取你已经拥有的对象。它的额外工作和代码复杂性(除非有一些你没有提及的不寻常的减罪细节)在任何方面都没有帮助。

如果 需要在不同的队列或线程上使用该对象,则传递可用于查找它的信息是正确的方法。但在这种情况下 - 不要传递其中一个属性的值。使用托管对象ID。 核心数据不会强制name值唯一,而对象managedObjectID 唯一。检索对象时速度也更快,因为您可以使用objectForID:existingObjectForID:代替执行提取。