Как мне сохранить объект типа DateComponents в поле CloudKit? - PullRequest
1 голос
/ 05 июля 2019

Я использую Swift для приложения для iOS.

Мне нужно сохранить объект DateComponents как поле в CloudKit.

Как бы я это сделал?

Пока что мне нужно установить в поле CloudKit тип Bytes и преобразовать объект DateComponents в объект Data. Глядя на документацию по классу Data, я не могу понять, как инициализировать объект Data. Я понятия не имею, как использовать UnsafeBufferPointer, используемый в одном из инициализаторов.

Следующий код выдает ошибку времени выполнения:

newRecord.setObject((dateComponents as! __CKRecordObjCValue), forKey: DatabaseNameStrings.fieldTime)

Вот сообщение об ошибке во время выполнения в окне отладки:

Не удалось преобразовать значение типа 'NSDateComponents' (0x1d04208c8) в '__C.CKRecordValue' (0x1d0420ab0).

Мне также нужно преобразовать данные в DateComponents. Классы Data и DateComponents соответствуют протоколу Codable, который наследует протокол Decoder. Один из инициализаторов DateComponents:

init(from: Decoder)

, что заставляет меня подозревать, что есть способ использовать этот init для преобразования типа Data в DateComponents после того, как я получу объект Data из поля CloudKit типа Bytes.

следующий код:

if let data = privateRecord.object(forKey: DatabaseNameStrings.fieldTime) as? Data {

    let dateComponents = DateComponents(from: data) // error here

}

генерирует ошибку в редакторе Xcode, которая говорит:

Тип аргумента «Данные» не соответствует ожидаемому типу «Декодер»

Я думал, что поскольку Data и DateComponents соответствуют протоколу Decoder, код будет работать.

1 Ответ

1 голос
/ 06 июля 2019

Кажется, вы немного перегружены этим. Вот пара альтернатив, которые вы могли бы рассмотреть:

  • Сохраните дату в поле даты в CloudKit и повторно проанализируйте компоненты даты в вашем приложении.
  • Храните каждый компонент даты (год, месяц, день и т. Д.) В виде отдельных целочисленных полей в CloudKit (или в виде строк, если вы хотите предварительно отформатировать их).

Просто мысль. Удачи. :)

...