tableView 中显示的核心数据关系

Posted

技术标签:

【中文标题】tableView 中显示的核心数据关系【英文标题】:Core Data Relationship shown in tableView 【发布时间】:2011-03-01 10:00:15 【问题描述】:

我正在开发一个带有显示核心数据表内容的表视图的应用程序。 数据模型是这样的: 实体(名称,代码)->>翻译(文本,代码)

我使用通常的 NSFetchedResultsController 检索所有实体,但是有一次是时候填充每一行(通过 tableview cellForRowAtIndexPath:) 我必须深入每个实体以根据用户输入的代码检索 2 个翻译。我正在使用 NSFetchRequest 来做到这一点,但我想知道这是否是正确的做法(每次填充一行时一个获取请求)。 本能地,我会在 NSFetchedResultsController 中检索我需要的所有数据,而不是每次填充单元格时都搜索每个翻译,但我不知道如何。 有没有人有一些建议,或者一些有趣的链接?

【问题讨论】:

【参考方案1】:

如果每个单元格必须显示与每个 Entity 对象相关的 Translation 对象,那么您只需将关系从获取的 Entity 对象遍历到适当的 Translation 对象。

获取 Entity 对象并构建表格以显示它们后,然后访问每个单元格行的翻译中的值,如下所示:

NSSet *translations=[anEntityObject valueForKey:@"translations"];

... 它为 tableview 行表示的 Entity 对象返回一组 Translation 对象。

作为一个非常普遍的规则,您只对每个 tableview 进行一次提取。表视图应配置为显示与特定实体相关的数据。

【讨论】:

这正是我正在做的,只是感觉内存很贵。感谢@TechZen 的确认。有不同意见的人吗? 我描述的模式是 90% 的应用程序会使用的方式,它是你绝对应该开始使用的方式。 NSFetchedResultController 非常适合内存使用。除非您有超过 1,000 行的表,否则这很少会成为问题。如果您确实有内存问题,请参阅 Core Data 编程指南以了解更改获取以控制内存的方法。但是,请记住 Knuth 的格言,“过早的优化是万恶之源”。不要浪费时间试图避免你可能永远不会遇到的问题。编写,测试,然后优化。尤其是在学习新的 API 时。 "过早的优化是万恶之源。"好一个!

以上是关于tableView 中显示的核心数据关系的主要内容,如果未能解决你的问题,请参考以下文章

TableView,以正确的顺序显示来自核心数据 NSSet 的记录

删除行时很少发生的 Tableview 错误 - 核心数据和 FetchedResultsController

iOS核心数据“加入”两个“表”

无法在 tableview Swift 中显示核心数据

核心数据获取关系对象

关系属性的核心数据获取请求