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

Posted

技术标签:

【中文标题】如何使用 NSPredicate 和 CloudKit 获取特定用户的最新帖子?【英文标题】:How to fetch the latest Post for specific users using NSPredicate and CloudKit? 【发布时间】:2015-06-29 06:57:59 【问题描述】:

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

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

我需要获取最新的 Posts 以获取特定的 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 小时内的所有用户 Posts。有没有什么方法可以只为每个提供的用户参考获得一个最新的帖子?

所需的结果将是特定用户的最新Posts 数组(例如 [user1, user2, user3]):

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

【问题讨论】:

【参考方案1】:

如果您想检索的记录数不是默认值(通常最多 100 条),请使用 CKQueryOperation 并设置 .resultsLimit

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

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

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

【讨论】:

谢谢!解决方法似乎是一个合理的权衡。

以上是关于如何使用 NSPredicate 和 CloudKit 获取特定用户的最新帖子?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 NSPredicate 从数组中选择确切的短语?

如何使用 NSPredicate 捕获子对象?

使用 Coredata 和 NSFetchRequest 进行“IN”搜索时如何格式化 NSPredicate

NSPredicate - 使用两个条件进行评估

iPhone如何使用NSPredicate按父实体过滤Core Data?