1

我有一个概念 sql 查询,它在核心数据表 t 上使用 group by,如下所示:

select a, b, sum(c) c_sum from t group by a, b;

使用核心数据,我可以运行查询(如使用核心数据的线程GROUP BY 和 SUM() 中所述)。我想使用 NSFetchedResultsController。我尝试了以下方法:

  1. 在我的“刷新”操作中,我尝试直接使用与上述group by query对应的获取请求,但遇到了“NSFetchedResultsController不支持NSDictionaryResultType的更改跟踪和获取请求”的问题。

  2. 然后我想到了以下内容。将记录保存在表 t 中。然后运行上述查询并将结果保存在另一个表 t1 中。将 nsfetchedresultscontroller 绑定到从 t1 进行的常规提取。不幸的是,在这种情况下,我遇到了 group by 查询在数据库中看不到任何内容的问题,因为文档保存操作是异步的。

  3. 为了解决上述问题,我尝试在插入表 t 后立即保存文档 - 但随后出现错误“此 NSPersistentStoreCoordinator 没有持久存储。它无法执行保存操作。”

显而易见的替代方法是我以编程方式进行分组和求和,然后将数据插入 t1 但我想我会在这里询问其他人是否有任何想法。我还没有尝试过的第二个是收听文档保存通知,然后插入 t1。另一种选择是不使用 nsfetchedresultscontroller - 我想避免。

想法?

谢谢!

更新:可以检测保存通知,然后使用分组查询从 t 填充 t1,但这不是一个好的解决方案,因为:1. 我是保存操作发生时的摆布 2. 每次保存时,都会重新填充表这显然不是一个好主意。

4

1 回答 1

0

好的。我终于想出了如何保存上下文,即如何在不遇到上述错误的情况下成功执行选项 3。选项 3 涉及使用 UIDocument saveToURL:forSaveOperation:completionHandler: 操作。这就是我尝试过的。但我犯的错误是我正在从与原始文档实例(我一直使用的托管上下文)相同的 url 创建一个新的 UIManaged Document 实例。

因此,现在在我的 viewWillAppear 中,我将文档也保存为属性,同时保存托管上下文属性。然后,当我运行 saveToUrl 时,我使用属性文档实例 - 在这种情况下,我没有收到错误消息“此 NSPersistentStoreCoordinator 没有持久存储。它无法执行保存操作。”

于 2013-07-10T18:12:58.843 回答