包含数据的ios表

时间:2013-07-10 03:38:27

标签: ios core-data group-by nsfetchedresultscontroller

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

从a,b选择a,b,sum(c)c_sum;

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

  1. 在我的“刷新”操作中,我试图通过查询直接使用与上述组对应的获取请求,但遇到问题“NSFetchedResultsController不支持更改跟踪和使用NSDictionaryResultType获取请求”。

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

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

  4. 显而易见的替代方案是让我按编程方式进行分组,然后将数据插入到t1中,但我想我会在这里问一下其他人是否有任何想法。我尚未尝试的第二个是收听文档保存通知,然后插入到t1。另一种方法是不使用nsfetchedresultscontroller - 我想避免使用它。

    思想?

    谢谢!

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

1 个答案:

答案 0 :(得分:0)

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

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