仅从 CoreDate 或所有内容中获取所需的数据?

Posted

技术标签:

【中文标题】仅从 CoreDate 或所有内容中获取所需的数据?【英文标题】:Fetch only needed data from CoreDate or everything? 【发布时间】:2016-08-22 22:00:39 【问题描述】:

我的问题可能听起来有点混乱,但我找不到更好的标题。让我解释一下:我正在开发一个 ios 应用程序,它使用 CoreData 来存储对象并使它们持久化。我想在UITableView 中显示存储的对象。每个对象都包含一个日期。我希望我的表格视图显示按日期排序的对象,并且每个月都是该表格视图中的一个部分。

+--------------------+
+---  March 2016  ---+
+--------------------+
+ - Entry 1          +
+ - Entry 2          +
+--------------------+
+-- February 2016  --+
+--------------------+
+ - Entry 1          +
+ .....              +
.
.
.
.
+--------------------+

由于表格视图需要知道在显示数据之前有多少行和部分,因此我至少需要知道我的 CoreData 存储中有多少条目。

方法 1

我只获取每个对象的日期并告诉表格视图它必须显示多少行。当数据源方法cellForRowAtIndexPath 被调用时,我会准确地获取我需要的对象的数据。 CoreData 是否足够快以执行此操作,还是用户必须等待片刻才能加载数据?

方法 2

我从我的 CoreData 存储中获取所有内容并将对象“存储”在我的 ViewController 中,其中包含表视图。可能需要大量内存才能将每个对象保存在内存中。

方法 3延迟加载?)

我从 CoreData 获取最新的 10-20 个对象。当用户向下滚动表格视图并即将到达最后一个条目时,我会获取接下来的 10-20 个条目并显示它们。我最初加载的条目呢?我应该把它们留在记忆中吗?还是在用户向上滚动到顶部时再次获取它们?

我不想在这上面“浪费”时间并亲自尝试每一个,我希望你能帮助我,并且有人对这类事情有经验。谢谢!

【问题讨论】:

方法 3 最适合您。获取对象后,将它们存储在视图控制器中的变量数组中。当用户获取更多时,附加您的数组并重新加载您的表。请记住,您也可以仅在需要时才获取计数,但这可能不是最佳策略。 你看过NSFetchedResultsController吗? 【参考方案1】:

使用NSFetchedRequestController 获取数据,如果需要,添加 NSPredicate's 到其中。享受:-)

【讨论】:

谢谢,这正是我需要的!【参考方案2】:

您应该使用NSFetchedResultsControler。您列出的所有选项都不正确,因为框架已经支持此要求。您根本不应该担心要获取什么。只需提供正确的配置,一切都将由框架处理。

实例化NSFetchedResultsController 时,提供sectionNameKeyPath 参数。您的提取结果将根据此属性进行分组。它可以是一个计算属性,在您的案例中,可以是您记录的月份和年份。

【讨论】:

以上是关于仅从 CoreDate 或所有内容中获取所需的数据?的主要内容,如果未能解决你的问题,请参考以下文章

获取显示视图中所有内容所需的高度

导入整个模块与仅从 python 中的模块导入所需的方法有啥区别? [复制]

获取布尔列值为 NO 或 nil 的 coredate 记录

我应该使用接收端所需的所有数据发出微服务事件,还是允许服务从数据库中获取额外数据?

我们是不是应该将授权所需的所有内容存储在 OAuth 令牌中

如何使用 javascript 或 jquery 仅从字符串中获取所有 HTML 标记? [关闭]