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

时间:2015-06-29 06:58:00

标签: ios nspredicate icloud cloudkit

让我们说我在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 个答案:

答案 0 :(得分:2)

如果要检索除默认值之外的其他数量的记录(通常最多100个),请使用CKQueryOperation并设置.resultsLimit

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

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

但是有一种可行的解决方法。我之前做过类似的事。用户添加新帖子的那一刻,您还可以更新用户数据并将最新帖子添加到用户recrodType。您可能会有一些重复数据,但只需查询用户即可获得所有最新帖子。