【问题标题】:How to create proper iOS CoreData database model?如何创建正确的 iOS CoreData 数据库模型?
【发布时间】:2012-02-07 21:36:55
【问题描述】:

我一直在学习 CoreData 以在我的应用程序中使用它,但在生成 sql 模型时遇到了一些问题。

我想拥有两个实体(至少)。一个是Items,另一个是History。 逻辑:每个历史实体都应该没有或有很多ItemsItems 不应相互重复 - 唯一性。

如何在 Xcode 中对此进行建模?我需要像“History2Items”这样的链接实体吗?

我已经为此苦苦挣扎了一段时间,但我可以找出正确的解决方案。

有什么帮助吗?

更新:

我做了这个模型:

为了获取数据,我使用了关系进行预取:

[request setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObject:@"item"]];

这就是我为每个历史获取项目的方式:

History *history = [self.historyArray objectAtIndex:indexPath.row];
NSMutableArray *items = [NSMutableArray arrayWithArray:[history.item allObjects]];

只需遍历 items 数组以获取每个 Item。

就这么简单。感谢@Ashley Mills。

【问题讨论】:

  • 我不确定,因为我目前没有任何 Xcode。但据我所知,您可以在图形编辑器中创建两个实体并将它们连接起来并设置适当的关系(1:n、n:1、1:1 等)
  • 这就是我所做的,但不起作用。我需要某种“链接”实体。看看我下面的回答答案 1。

标签: ios database sqlite core-data model


【解决方案1】:

创建ItemHistory 实体并将它们连接如下:

如果Item 可以属于多个History,请将关系从一对多更改为多对多。

如果您打算通过索引为历史排序项目,您只需要一个链接实体,因为每个项目对于给定的历史可能有不同的索引。例如,如果您按日期订购商品,则不需要链接实体。

【讨论】:

  • 我忘了提到 Item 实体应该有唯一的项目。这意味着两个历史元素可以具有相同的项目。在 SQL 世界中,我将创建一个链接实体。我说的对吗?
  • 这不是 SQL,所以试着忘记你从那里知道的东西!更新了我的答案。
  • 好的,我已经完成了。现在看起来不错。但我还有另一个问题。我想获取选定历史记录的项目。现在我做了这个: History *history = [self.historyArray objectAtIndex:indexPath.row]; NSMutableArray *items = [history.item allObjects];但是每个项目对象都有数据:。怎么样?
  • 故障是一个占位符对象,表示尚未完全实现的托管对象。当您访问数据时,故障将得到解决。
  • 没错。但我想知道最后一部分——如何访问特定历史对象的数据?我只是尝试做 NSFetchRequest 来拉取选定历史对象的所有项目,但没有运气。仍然得到 .
猜你喜欢
  • 2011-06-10
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
相关资源
最近更新 更多