CloudKit - NSPredicate для поиска всех записей, содержащих указанную CKReference, в списке ссылок

Я работаю над приложением, поддерживаемым CloudKit, с типом записи «Пользователи», имеющим атрибут списка ссылок «следующий». Я пытаюсь создать запрос, чтобы получить каждого пользователя, следующего за указанным пользователем (то есть тех пользователей, в которых указанный пользователь отображается как запись в следующем списке ссылок).

В настоящее время я пытаюсь построить свой NSPredicate для CKQuery как таковой:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ IN following", [[CKReference alloc] initWithRecordID:currentUserID action:CKReferenceActionNone]];
CKQuery *query = [[CKQuery alloc] initWithRecordType:UserRecordType predicate:predicate];

CloudKit возвращает следующее сообщение об ошибке:

"Unknown Item" (11/2003); server message = "did not find required record type";

Я чувствую, что могу упустить что-то очень прямое в своем предикате. Любая помощь будет принята с благодарностью!


person sgonzalez    schedule 07.08.2014    source источник
comment
Мне любопытно, как можно запрашивать записи пользователей? Насколько я знаю, это запрещено.   -  person Shmidt    schedule 15.11.2014


Ответы (2)


Используйте оператор CONTAINS для проверки членства в списке:

CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:currentUserID action:CKReferenceActionNone];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"following CONTAINS %@", recordToMatch];

Если вы хотите запросить более 1 ссылки, вам необходимо использовать составной предикат с типом предиката AND для каждой ссылки в списке.

person Denis    schedule 11.08.2014
comment
Это не сработает, поскольку поле following - это список ссылок, а не отдельная ссылка. - person sgonzalez; 12.08.2014
comment
Понятно, в этом случае я обновил ответ на список литературы. - person Denis; 13.08.2014
comment
Вот что мне нужно, это отлично работает. Спасибо! - person sgonzalez; 13.08.2014

Ошибка 11 означает, что запрос не может найти в вашем контейнере никаких элементов, соответствующих вашему типу записи. В вашем случае записи типа UserRecordType не существуют в Cloud Kit. Вы можете создать образец схемы для этого типа, и после этого запрос будет работать.

person LevinsonTechnologies    schedule 29.11.2014
comment
Он действительно существует в CloudKit. Взгляните на ответ, отмеченный как правильный. - person sgonzalez; 29.11.2014
comment
Хорошо спасибо. Я получал ошибку 11, и моя причина заключалась в том, что записи не существовало. - person LevinsonTechnologies; 30.11.2014