Почему я не могу получить доступ к полю созданного в моем CKRecord в CloudKit? - PullRequest
0 голосов
/ 07 декабря 2018

Я не могу получить доступ к системному полю созданного в моем типе записи в CloudKit.Я пробовал оба «createAt» и «creationDate» в качестве параметра аргумента CKQueryOperation.desiredKeys.В любом случае, когда я получаю доступ к полю созданного при помощи CKRecord.object (forKey :), я получаю ноль.

Вот мой код для извлечения записей:

    entries = [Entry]()

    let predicate = NSPredicate(value: true)
    let query = CKQuery(recordType: DatabaseNameStrings.recordTypeEntry, predicate: predicate)
    let sortDescriptor = NSSortDescriptor(key: DatabaseNameStrings.recordFieldKeyCreationDate, ascending: true)
    query.sortDescriptors = [sortDescriptor]
    let queryOperation = CKQueryOperation(query: query)
    queryOperation.desiredKeys = [DatabaseNameStrings.recordFieldKeyCreationDate, DatabaseNameStrings.fieldNameText]
    queryOperation.recordFetchedBlock = {
        (record: CKRecord) in
        let entry = Entry(ckRecord: record)
        self.entries.append(entry)
    }
    queryOperation.queryCompletionBlock = {
        (cursor: CKQueryOperation.Cursor?, error: Error?) in
        if let error = error {
            print(error.localizedDescription)
        } else {
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
            if let cursor = cursor {
                let innerQueryOperation = CKQueryOperation(cursor: cursor)
                innerQueryOperation.desiredKeys = queryOperation.desiredKeys
                innerQueryOperation.recordFetchedBlock = queryOperation.recordFetchedBlock
                innerQueryOperation.queryCompletionBlock = queryOperation.queryCompletionBlock
                queryOperationQueue.addOperation(queryOperation)
            }
        }
    }
    queryOperationQueue.addOperation(queryOperation)

Вот кодк строковым переменным, которые содержат ключи:

enum DatabaseNameStrings {

    static let recordTypeEntry = "Entry"
    static let fieldNameCreatedAt = "createdAt"
    static let fieldNameText = "text"
    static let recordFieldKeyCreationDate = "creationDate"

}

Вот код, к которому я обращаюсь к полю createAt:

        print(ckRecord.object(forKey: DatabaseNameStrings.recordFieldKeyCreationDate) as Any)
        print(ckRecord.object(forKey: DatabaseNameStrings.fieldNameCreatedAt) as Any)

1 Ответ

0 голосов
/ 07 декабря 2018

Я использую CKRecord.creationDate вместо CKRecord.object (forKey:).

...