核心数据获取并获得准确的对象计数

Posted

技术标签:

【中文标题】核心数据获取并获得准确的对象计数【英文标题】:Core data fetching and getting an accurate object count 【发布时间】:2013-09-08 14:16:45 【问题描述】:

我正在使用 ios 6.1 进行编码并使用 Core Data。

我有一个实体;称它为 NextID。

当我建立与 Core 数据的连接时,执行 addPersistentStoreWithType 步骤时会创建 NextID.sqlite 文件。

此时,我的数据库基本上是空的。

然后我创建一个获取查询并针对实体运行它,然后我得到一个 fetchedResultsController。

我计算了 fetchedResultsController 持有的对象并得到一个零,正如我所期望的那样。

然后我为 NextID 实体创建并初始化一个新对象。

作为测试,我再次使用 fetchedResultsController.count 计数并再次获得零,我认为这是正确的。

然后我保存我的上下文。

然后我再次使用 fetchedResultsController.count 进行测试 - 再次获得零。

现在我很困惑。

然后我阅读了有关 fetchedObjects 的以下内容:

“结果数组反映了控制器的托管对象上下文中托管对象的内存状态,而不是它们在持久存储中的状态。但是,返回的数组不会随着托管对象的插入、修改或删除而更新。”

这对我来说似乎是一个矛盾的陈述。 “结果数组反映了控制器的托管对象上下文中托管对象的内存状态”和“但是,返回的数组不会随着托管对象的插入、修改或删除而更新。”在我看来,目的是不同的。

但无论如何,我在想,如果我想在执行 fetchedResultsController.count 时获得准确的计数,那么我需要先保存然后重新获取,然后再请求最新的计数。

由于我在其他地方读到的内容,我也在想,这不会是一件昂贵的事情,因为执行提取操作与实际加载所有提取到内存中的对象不同,因为这些物理负载仅在需要时才会进入内存。

我是否走在正确的轨道上并以合理的方式思考这些事情?

【问题讨论】:

core data: [NSFetchedResultsController -fetchedObjects], will this method reflect object change?的可能重复 【参考方案1】:

打算用木桩穿过这个人的心脏。我想我的问题得到了回答here。谢谢大家。

【讨论】:

【参考方案2】:

如果您不熟悉核心数据,请使用神奇的记录。它易于集成: 这里有教程:http://ablfx.com/blog/article/2

http://yannickloriot.com/2012/03/magicalrecord-how-to-make-programming-with-core-data-pleasant/#sthash.GNErDSr8.8VBBav02.dpbs

【讨论】:

MagicalRecord 使用相同的 NSFetchedResultsController 作为“普通”核心数据应用程序,因此这不能回答问题。【参考方案3】:

编辑: 加里蒙所说的。期间。

Gallymon 所说的,以及: NSFetchedResultsController 具有通知您新/更新/删除项目/部分的委托方法。这些可能会帮助您或使您更加困惑(我的目标是第一个:))。

【讨论】:

在 Gallymon 给出的链接中提到了 FRC 委托方法 :-)

以上是关于核心数据获取并获得准确的对象计数的主要内容,如果未能解决你的问题,请参考以下文章

基于字段的弹性搜索计数查询,其值包含文件系统路径

如何比较两个表获得真假计数

具有特殊限制的核心数据获取关系计数

获取核心数据中一对多关系的计数

如何从核心数据中获取最多计数的字符串值

如何为对象计数多个关系创建谓词?核心数据 iOS Swift