【问题标题】:Core Data entity design for master-detail interface主从接口的核心数据实体设计
【发布时间】:2012-01-23 17:39:32
【问题描述】:

我正在开发一个具有主从界面的应用程序,该界面显示用户可以深入了解的产品列表。初始化时,应用程序从 Web 服务加载(1000 多种)产品的摘要信息,并将其显示在表格视图中。当用户选择特定产品时,应用会调用 Web 服务以获取该产品的详细信息并将其显示在详细视图中。

我想使用 Core Data 框架在会话之间保留这些数据。

我可以想到两种方法来对这些数据进行建模。

  1. 使用包含此对象所有属性的单个核心数据实体产品。当表视图被初始化时,这些实体被填充了摘要数据。选择特定产品后,仅会为该产品填充剩余字段。
  2. 使用两个核心数据实体,ProductSummaryProductDetail,它们之间具有摘要/详细信息关系。 ProductSummary 包含由表视图加载的属性。 ProductDetail 包含详细视图加载的属性。

每个选项的优缺点是什么?选项 1 确实看起来更容易编码,但我是否将内存使用问题存储起来以备后用?性能是否相同?

【问题讨论】:

  • 过早的优化。通过将固有的 Product 属性分离到不同的实体中,您的生活变得复杂。无论如何,您永远不会同时加载所有实体(或者至少不应该),并且未使用的托管对象将保留为故障,因此您应该没有内存问题。
  • @Rog 在我接受以下答案后注意到您的评论...我的NSFetchedResultsController 正在将产品以 20 个批次返回到我的视图控制器。假设我向下滚动到 1000 个列表的底部产品 - 我在任何时候都最多可以存储 20 个产品吗?
  • 很难确切地知道有多少会被加载到内存中,因为对象的获取和错误是在幕后自动发生的。我可以告诉你,我已经使用过使用 CoreData 获取的 4000 多个项目的表格视图,我什至没有收到内存警告。

标签: ios cocoa-touch core-data


【解决方案1】:

有了尽可能多的对象,请使用选项 2。将输入的数据和实体的属性保持在您需要在电视中显示的内容。设置与 detail 的关系,并在 detail VC 进来时加载它。

我正在做类似的事情,除了 ~4500 行。我只存储我需要的东西,然后转向其他实体以获取与对象相关的详细信息。

【讨论】:

  • 感谢您的回答-我认为您是对的-我试图减少编码!
  • 没问题。另一条建议。如果您计划实施搜索,请确保在过滤数据时保持较低的 fetchlimit。这将使过滤更加灵敏。如果你需要我,我可以告诉你我在做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多