仅从 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 记录
我应该使用接收端所需的所有数据发出微服务事件,还是允许服务从数据库中获取额外数据?