Сервер CloudKit отклонил запрос: неизвестное поле recordName

Я делаю CKQuery как это в Swift 4:

CKQuery(recordType: package.recordType, predicate: 
  NSPredicate(format: "NOT (recordName IN %@)", package.recordNames as CVarArg))

... и я получаю это CKError:

CKError (_nsError: CKError 0x60000024dce0: "Запрос отклонен сервером" (15/2000); сообщение сервера = "Неизвестное поле" имя-записи ""; uuid = BCD7C8DA-04B0-4422-8A24-F6479D234706; идентификатор контейнера = "...")

Есть ли специальный ключ для использования при запросе recordName?

1 ответ

Покопавшись, я обнаружил, что вы не можете делать запросы по recordName напрямую, но вы можете запросить recordID, Таким образом, вместо сравнения массива строк, вы должны построить массив CKRecordIDи запрос, как это:

//- 1 - Build an array of CKRecordIDs
package.recordIDs = [CKRecordID(recordName: "..."), CKRecordID(recordName: "...")]

//- 2 - Set the predicate to use the `recordID` key
let pred = NSPredicate(format: "NOT (recordID IN %@)", package.recordIDs as CVarArg)

//- 3 - Set the query and drop your mic
CKQuery(recordType: package.recordType, predicate: pred)

Я надеюсь, что это помогает кому-то еще.

Другие вопросы по тегам