ios - 如何使用 NSPredicate 和 CloudKit 获取特定用户的最新帖子?

标签 ios nspredicate icloud cloudkit

假设我在 iCloud 中有以下模型:

 ___________         ___________
| Users     |<-_    | Posts     | 
|-----------|   |   |-----------|
| firstName |   |   | text      |
| lastName  |   --- | user      |
 -----------         -----------

我需要为特定的用户引用获取最新的帖子

目前我正在使用这样的谓词:

let userRefs: [CKReference] = [...]
let predicate = NSPredicate(format: "%K IN %@ AND creationDate >= %@", "user", userRefs, NSDate.twentyFourHoursAgo)

let query = CKQuery(recordType: "Posts", predicate: predicate)
query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

但它为我提供了过去 24 小时内的所有用户 帖子。有没有什么方法可以为每个提供的用户引用只获取一个最新的帖子?

期望的结果是特定用户(例如 [user1, user2, user3])的最新 帖子 的数组:

[
    Post<text, user1>
    Post<text, user2>
    Post<text, user3>
]

最佳答案

如果你想检索除默认值(通常最大 100)之外的其他记录数,则使用 CKQueryOperation 并设置 .resultsLimit

在您的情况下,您可以在仅对 1 个用户执行查询时将其设置为 1。

您实际想要执行的查询对于 CloudKit 是不可能的,因为您需要某种聚合查询。不支持聚合查询。因此,解决此问题的唯一方法是为每个用户执行查询以获取其最新帖子。

然而,有一个可行的解决方法。我以前做过类似的事情。当用户添加新帖子时,您还可以更新用户数据并将最新帖子添加到用户 recrodType。你会有一些重复的数据,但你可以通过查询用户来获得所有最新的帖子。

关于ios - 如何使用 NSPredicate 和 CloudKit 获取特定用户的最新帖子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31109534/

相关文章:

swift - CloudKit自动后台备份

ios - 如何检测 UIBarButtonItem 的 touchesbegan touchesended?

ios - 如果对象的键不同,如何编写模型结构

objective-c - NSPredicate 转义反斜杠字符

ios - 带有iOS 10.3的iPhone 5和iPad第四代在NSPredicate崩溃

ios - NSPredicate 与子查询

ios - 用户未登录时,用户设置拒绝了错误 CloudKit 访问

icloud - iCloud 的 CalDav 客户端 : MKCOL fails with 412 precondition failed

ios - 在 UITableView 中插入一些行后,它不会在 ios 7 中滚动

ios - Xcode 9.2 的正确应用程序图标 (appicon) 命名约定是什么?