jdo*_*doe 8 group-by core-data ios swift
需要帮忙.
我的桌子上有4个字段:
我想选择电子邮件,消息(最近),date_received和未读消息的总和
这是我的预期结果:
test@email.com | 测试消息| 2015-02-27 | 28 test2@email.com | 测试Message2 | 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)!
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
只需使用通常的方式获取消息NSManagedObjectResultType(您不需要指定)。然后只需通过 KVC 获取计数(两种解决方案都经过测试):
let count = (result.filteredArrayUsingPredicate(
NSPredicate(format: "read = NO")) as NSArray).count
Run Code Online (Sandbox Code Playgroud)
一种非标准但也许更简洁的方法是利用布尔值存储为 1 和 0 的事实
let count = result.count - result.valueForKeyPath("@sum.read")!.integerValue
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2237 次 |
| 最近记录: |