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

时间:2016-08-22 22:00:40

标签: ios swift uitableview core-data swift3

我的问题可能听起来有点令人困惑,但我找不到更好的头衔。让我解释一下:我正在开发一个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个条目并显示它们。我最初加载的条目怎么样?我应该把它们留在记忆中吗?如果用户向上滚动到顶部,还是再次获取它们?

我不想“浪费”时间并自己尝试每一个,我希望你可以帮助我,并且有人有这种东西的经验。谢谢!

2 个答案:

答案 0 :(得分:2)

使用NSFetchedRequestController获取数据,如果需要,可以添加NSPredicate。享受: - )

答案 1 :(得分:0)

您应该使用NSFetchedResultsControler。您列出的所有选项都不正确,因为框架已经支持此要求。你不应该担心要取什么。只需提供正确的配置,框架就会处理所有内容。

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