【问题标题】:Core data: can NSFetchedResultsController fetch two different entities?核心数据:NSFetchedResultsController 可以获取两个不同的实体吗?
【发布时间】:2011-03-09 23:52:10
【问题描述】:

我正在开发一个 iPhone 应用程序,在特定视图中我需要加载两个不同的实体:一个将填充 UITableView,另一个将填充 UITextView

是否可以使用单个 NSFetchedResultsController 获取这两个属性?

或者我需要使用两个不同的NSFetchedResultsControllers?

关于如何最好地解决这个问题的任何想法?

【问题讨论】:

  • 您能否更具体地了解一下您的模型是如何设置的?两个实体之间有关系吗?如果是这样,您可能只需遍历关系即可获得所需的值,而无需进行两次提取。
  • 嗨,Alex,这两个实体不相关。它是这样设置的: * Entity "Item_comment" 代表我想在 UITableView 中显示的 cmets。用户可以点击任意数量的这些 cmets 来存储它们。 * 实体“Inspection_data”表示 Item cmets 文本的记录(不是实体,而只是该实体的文本)。我想在 UITextView 中显示的该记录的文本。
  • 在单个 fetch 请求中返回多个实体类型的唯一方法是它们都继承自一个公共父实体,并且您将 fetch 实体设置为父实体。

标签: cocoa core-data controller entities


【解决方案1】:

每个提取请求只有一个实体,每个提取结果控制器只有一个提取。因此,您需要为每个实体设置单独的控制器。

如果您考虑一下,您将如何创建一个谓词来获取两个逻辑上独立的实体?

您可能根本不需要两次提取。在大多数情况下,您可以获取填充表格的实体,然后使用所选行的实体的关系来填充文本视图之类的内容。

【讨论】:

  • 谢谢。我添加了第二个 fetch 控制器,确保它没有委托,并且它完全按预期工作。因为一旦第二个 fetch 控制器返回了它的结果,我就不需要采取任何行动,所以我不需要监听变化。
  • 没有问题,你确实需要监听变化。您只需对每个委托方法进行比较。 if (controller == self.entity1FetchedResultsController){...} else {...}
  • 我有两个实体子类一个超级实体的情况。在这种情况下,获取应该能够在一个控制器中获取所有这些。然后,您需要对一些常见属性进行排序并检查类类型以确定单元格渲染。
  • 所以 NSFetchedResultsController 的节数总是 1 ?正确的 ?因为一个 NSFetchedResultsController 只能有一个实体。..
【解决方案2】:

正如 TechZen 所说,答案是否定的。

但是,您可以自己监控NSManagedObjectContext 的保存并对这些保存做出反应。如果您确实需要观看多个实体(这在 iPad 上比在 iPhone 上更常见)然后在 NSManagedObjectContextDidSaveNotification 上添加一个 NSNotification 观察者并查看 NSNotification 中的 -userInfo回来。然后,您可以针对结果运行谓词以确定是否需要更新显示。这就是NSFetchedResultsController 在幕后所做的事情。

【讨论】:

    【解决方案3】:
    The quick answer is NO. But I found a creative answer.
    

    在您的 tableViewController 中,创建一个搜索栏,显示您拥有的范围。

    选择不同的范围时,您可以获取不同的实体!

    这很有效,因为我制作了这样的应用程序!

    用户也可以更轻松地分离两个不同的数据!

    【讨论】:

      【解决方案4】:

      最好的解决方案是重构您的模型,看看您的 2 个实体是否有共同点。您可以为相交的东西创建一个抽象实体,然后从中继承您的 2 个实体。对抽象实体执行提取,您的提取结果控制器应返回混合结果。

      【讨论】:

      • 这是正确答案,奇怪的是错误答案的投票率如此之高。
      猜你喜欢
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多