IOS Swift Core Data如何在propertiesToFetch中添加不在propertiesToGroupBy中的字段
Posted
技术标签:
【中文标题】IOS Swift Core Data如何在propertiesToFetch中添加不在propertiesToGroupBy中的字段【英文标题】:IOS Swift Core Data how to add fields in propertiesToFetch that is not in propertiesToGroupBy 【发布时间】:2015-03-20 12:01:42 【问题描述】:需要帮助。
我的表中有 4 个字段:
电子邮件 留言 阅读 收到日期我要选择电子邮件、消息(最近)、接收日期和未读消息的总和
这是我的预期结果:
test@email.com |测试留言 | 2015-02-27 | 28 test2@email.com |测试信息2 | 2015-02-29 | 2
这是我当前的代码:
let fetchRequest:NSFetchRequest = NSFetchRequest()
if let entityDescription:NSEntityDescription = NSEntityDescription.entityForName("Message", inManagedObjectContext: managedObjectContext)
fetchRequest.entity = entityDescription
fetchRequest.propertiesToFetch = ["email","message","read","date_received"]
fetchRequest.propertiesToGroupBy = ["email"]
fetchRequest.resultType = .DictionaryResultType
fetchRequest.returnsObjectsAsFaults = false
let items:NSArray = managedObjectContext .executeFetchRequest(fetchRequest, error: nil)!
输出:
20 18:24:51.639 JPtxt[33368:1345477] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'SELECT clauses in queries with GROUP BY components can only contain properties named in the GROUP BY
【问题讨论】:
请启用SQL query logging 并发布结果查询。 我觉得你的问题和这个一样:***.com/questions/20995405/… 【参考方案1】:只需使用通常的NSManagedObjectResultType
获取消息(您无需指定)。然后通过 KVC 获取计数(两种解决方案都经过测试):
let count = (result.filteredArrayUsingPredicate(
NSPredicate(format: "read = NO")) as NSArray).count
一种非标准但可能更简洁的方法是利用布尔值存储为 1 和 0 的事实
let count = result.count - result.valueForKeyPath("@sum.read")!.integerValue
【讨论】:
【参考方案2】:您遇到的错误与 SQL 规则有关。也就是说,SQL 指出,如果您想按 ["email"] 进行分组,则不能请求其他属性,除非您也想按它们进行分组。例如,如果您想按“性别”和“年龄”来计算消息,而不是这样。
fetchRequest.propertiesToFetch = ["email"]
但是,您可以并且将需要“已读”属性上的谓词来表示您只需要未读消息。在发出请求后,谓词通常比过滤更高效:
fetchRequest.propertiesToGroupBy = ["email"]
fetchRequest.predicate = NSPredicate(format: "read = NO")
【讨论】:
以上是关于IOS Swift Core Data如何在propertiesToFetch中添加不在propertiesToGroupBy中的字段的主要内容,如果未能解决你的问题,请参考以下文章
IOS Swift Core Data如何在propertiesToFetch中添加不在propertiesToGroupBy中的字段
Swift - 如何检查现有的 Core Data Store iOS
如何在 SWIFT 的 IOS CORE-DATA 请求中使用 SQL GROUP BY 和 SUM 函数?
如何正确设置 Core Data Stack 到 iOS 和 Swift 中的第一个视图控制器?