Saving data to CloudKit
suggest changeTo save date to CloudKit, we must make:
- A
CKRecordID
(the key of your unique record) - A
CKRecord
(which includes data)
Making a record key
To ensure that every new record identifier is unique, we use the current timestamp, which is unique. We get the timestamp using NSDate
’s method timeIntervalSinceReferenceDate()
. It is in form of ###.### (# are numbers), which we will use the integer part. To do this, we split the string:
Swift
let timestamp = String(format: "%f", NSDate.timeIntervalSinceReferenceDate())
let timestampParts = timestamp.componentsSeparatedByString(".")
let recordID = CKRecordID(recordName: timestampParts[0])
Making the record
To make the record, we should specify the record type (explained in Using CloudKit Dashboard) as Users, the ID as the thing we made just now and the data. Here, we will add a sample text, a picture and the current date to the record:
Swift
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"];
Note
Here, we didn’t add the UIImage
directly to the record, because as mentioned in Remarks, image format isn’t directly supported in CloudKit, so we have converted UIImage
into CKAsset
.
Accessing the container
Swift
let container = CKContainer.defaultContainer()
let database = container.privateCloudDatabase // or container.publicCloudDatabase
Saving the records to CloudKit database
Swift
database.saveRecord(record, completionHandler: { (_, error) -> Void in
print(error ?? "")
})
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents