如何将 DateComponents 类型的对象保存到 CloudKit 字段?
How would I save an object of type DateComponents to a CloudKit field?
我正在为 iOS 应用程序使用 Swift。
我需要将 DateComponents 对象存储为 CloudKit 中的字段。
我该怎么做?
到目前为止,我认为我需要将 CloudKit 字段设置为类型字节,并将 DateComponents 对象转换为数据对象。查看数据 class 的文档,我不知道如何初始化数据对象。我不知道如何使用其中一个初始化程序中使用的 UnsafeBufferPointer。
以下代码给出运行时错误:
newRecord.setObject((dateComponents as! __CKRecordObjCValue), forKey: DatabaseNameStrings.fieldTime)
这是调试中的运行时错误消息 window:
Could not cast value of type 'NSDateComponents' (0x1d04208c8) to '__C.CKRecordValue' (0x1d0420ab0).
我还需要将数据转换为 DateComponents。 Data和DateComponents classes都符合Codable协议,它继承了Decoder协议。 DateComponents 的初始化器之一是:
init(from: Decoder)
这让我怀疑在我从字节类型的 CloudKit 字段中获取数据对象后,有一种方法可以使用该 init 将类型数据转换为 DateComponents。
以下代码:
if let data = privateRecord.object(forKey: DatabaseNameStrings.fieldTime) as? Data {
let dateComponents = DateComponents(from: data) // error here
}
在 Xcode 编辑器中生成一个错误:
Argument type 'Data' does not conform to expected type 'Decoder'
我认为既然 Data 和 DateComponents 都符合 Decoder 协议,那么代码就可以工作了。
看来你可能有点over-engineering了。以下是您可以考虑的几个备选方案:
- 将日期存储在 CloudKit 和 re-parse 上的日期字段中,以便为应用中的组件添加日期。
- 将每个日期组成部分(年、月、日等)存储为 CloudKit 上的单独整数字段(或者如果要 pre-format 则存储为字符串)。
只是一个想法。祝你好运。 :)
我正在为 iOS 应用程序使用 Swift。
我需要将 DateComponents 对象存储为 CloudKit 中的字段。
我该怎么做?
到目前为止,我认为我需要将 CloudKit 字段设置为类型字节,并将 DateComponents 对象转换为数据对象。查看数据 class 的文档,我不知道如何初始化数据对象。我不知道如何使用其中一个初始化程序中使用的 UnsafeBufferPointer。
以下代码给出运行时错误:
newRecord.setObject((dateComponents as! __CKRecordObjCValue), forKey: DatabaseNameStrings.fieldTime)
这是调试中的运行时错误消息 window:
Could not cast value of type 'NSDateComponents' (0x1d04208c8) to '__C.CKRecordValue' (0x1d0420ab0).
我还需要将数据转换为 DateComponents。 Data和DateComponents classes都符合Codable协议,它继承了Decoder协议。 DateComponents 的初始化器之一是:
init(from: Decoder)
这让我怀疑在我从字节类型的 CloudKit 字段中获取数据对象后,有一种方法可以使用该 init 将类型数据转换为 DateComponents。
以下代码:
if let data = privateRecord.object(forKey: DatabaseNameStrings.fieldTime) as? Data {
let dateComponents = DateComponents(from: data) // error here
}
在 Xcode 编辑器中生成一个错误:
Argument type 'Data' does not conform to expected type 'Decoder'
我认为既然 Data 和 DateComponents 都符合 Decoder 协议,那么代码就可以工作了。
看来你可能有点over-engineering了。以下是您可以考虑的几个备选方案:
- 将日期存储在 CloudKit 和 re-parse 上的日期字段中,以便为应用中的组件添加日期。
- 将每个日期组成部分(年、月、日等)存储为 CloudKit 上的单独整数字段(或者如果要 pre-format 则存储为字符串)。
只是一个想法。祝你好运。 :)