核心数据——传递实体名称或对整个实体的引用?

Core Data--pass name of entity or reference to entire entity?

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

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

我的问题是:

当我将 WMMGAccount 数据从一个 VC 传递给另一个 VC 时,例如创建新帐户时,或从列表中选择一个时(通常通过授权),这有关系吗如果我传递对整个实体的引用,或者我是否可以只使用带有帐户 .nameNSString 并在需要时使用谓词和 NSFetchedResultsController 标识帐户?我想这是一个策略问题,可能会引起讨论,而不是得到一个干脆的答案,但我正在努力解决这个问题,所以我想我会问。

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

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

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