我的问题可能听起来有点令人困惑,但我找不到更好的头衔。让我解释一下:我正在开发一个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个条目并显示它们。我最初加载的条目怎么样?我应该把它们留在记忆中吗?如果用户向上滚动到顶部,还是再次获取它们?
我不想“浪费”时间并自己尝试每一个,我希望你可以帮助我,并且有人有这种东西的经验。谢谢!
答案 0 :(得分:2)
使用NSFetchedRequestController获取数据,如果需要,可以添加NSPredicate。享受: - )
答案 1 :(得分:0)
您应该使用NSFetchedResultsControler
。您列出的所有选项都不正确,因为框架已经支持此要求。你不应该担心要取什么。只需提供正确的配置,框架就会处理所有内容。
实例化NSFetchedResultsController
时,请提供sectionNameKeyPath
参数。您的获取结果将根据此属性进行分组。它可以是您的案例,记录的月份和年份的计算属性。