将数据保存到 CloudKit

要将日期保存到 CloudKit,我们必须:

  • 一个 CKRecordID(你唯一记录的关键)
  • 一个 CKRecord(包括数据)

制作记录密钥

为确保每个新记录标识符都是唯一的,我们使用当前时间戳,这是唯一的。我们使用 NSDate 的方法 timeIntervalSinceReferenceDate() 获取时间戳。它是###。###(#are numbers)的形式,我们将使用整数部分。为此,我们拆分字符串:

迅速

let timestamp = String(format: "%f", NSDate.timeIntervalSinceReferenceDate())
let timestampParts = timestamp.componentsSeparatedByString(".")
let recordID = CKRecordID(recordName: timestampParts[0])

做记录

要进行记录,我们应该将记录类型(在使用 CloudKit 仪表板中解释)指定为用户,将 ID 作为我们刚刚制作的内容和数据。在这里,我们将向记录中添加示例文本,图片和当前日期:

迅速

let record = CKRecord(recordType: "Users", recordID: recordID)
record.setObject("Some Text", forKey: "text")
record.setObject(CKAsset(fileURL: someValidImageURL), forKey: "image")
record.setObject(NSDate(), forKey: "date")

Objective-C

CKRecord *record = [[CKRecord alloc] initWithRecordType: "Users" recordID: recordID];
[record setObject: "Some Text" forKey: "text"];
[record setObject: [CKAsset assetWithFileURL: someValidImageURL] forKey: "image"];
[record setObject: [[NSDate alloc] init] forKey: "date"];

注意

在这里,我们没有将 UIImage 直接添加到记录中,因为如备注中所述,CloudKit 不直接支持图像格式,因此我们已将 UIImage 转换为 CKAsset

访问容器

迅速

let container = CKContainer.defaultContainer()
let database = container.privateCloudDatabase // or container.publicCloudDatabase

将记录保存到 CloudKit 数据库

迅速

database.saveRecord(record, completionHandler: { (_, error) -> Void in
    print(error ?? "")
})