2015-06-29 5 views
2

Скажем, у меня есть следующая модель в ICloud:Как получить последнее сообщение для определенных пользователей с помощью NSPredicate и CloudKit?

___________   ___________ 
| 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)] 

Но это дает мне все пользовательские Posts за последние 24 часа. Есть ли способ получить только один, последний, пост за каждый предоставил ссылки на пользователя?

Желаемый результат будет массив из последних Posts для определенных пользователей (например, [user1, user2, user3]):

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

ответ

2

Если вы хотите, чтобы извлечь другое количество записей, чем по умолчанию (обычно max 100), затем используйте CKQueryOperation и установите значение .resultsLimit

В вашем случае вы можете установить его в 1 при выполнении запроса только для одного пользователя.

Запрос, который вы действительно хотите выполнить, невозможен с помощью CloudKit, потому что вам понадобится какой-то агрегатный запрос. Совокупные запросы не поддерживаются. Таким образом, единственный способ сделать это - выполнить запрос для каждого пользователя, чтобы получить его последнее сообщение.

Существует, однако, обходной путь, который может работать. Раньше я делал что-то подобное. Когда пользователь добавит новое сообщение, вы также сможете обновить данные пользователя и добавить последнее сообщение пользователю recrodType. У вас будет несколько повторяющихся данных, но вы можете получить все последние сообщения, просто запросив пользователей.

+0

Спасибо! Обходной путь кажется разумным компромиссом. –