Reputation: 105
The question is to fetch data from User Records when UserRecordID is fetched.
Method to get User ID: post.creatorUserRecordID?.recordName
My Users Record Type contains columns like username, so, I need to parse them for a concrete user. Is it possible somehow?
Upvotes: 4
Views: 659
Reputation: 5053
It is simpler now using async/await in Swift 5
func getUserID() async {
let container = CKContainer(identifier: "iCloud.com.XXX.XXXX")
// CKContainer.defaultContainer().publicCloudDatabase // or default public container
do {
let userRecordID = try await container.userRecordID()
print("recordName: \(userRecordID.recordName)")
}
catch {
print("Error: \(error)")
}
Upvotes: 0
Reputation: 1783
If I understood your question and you already have a CKRecordID. All you got to do then is to fetchRecordWithID using this CKRecordID you got.
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
publicDatabase.fetchRecordWithID(recordId, completionHandler: { (fetchRecord: CKRecord?, fetchError: NSError?) in
if let error = fetchError
{
// error getting user record, try again
print("-> cloudKitFetchUserRecord - error fetching user record - Error \(error)")
}
else
{
if let record = fetchRecord
{
if record.recordType == CKRecordTypeUserRecord
{
// valid record
print("-> cloudKitFetchUserRecord - fetching user record - valid record found - \(record.recordID.recordName))")
// unwrap your values - on your case username
if let object = record.objectForKey("username") as? Bool
{
// do something with object
}
}
else
{
// not valid record
print("-> cloudKitFetchUserRecord - fetching user record - The record that came back is not a CKRecordTypeUserRecord")
}
}
else
{
// record nil
print("-> cloudKitFetchUserRecord - fetching user record - fetch record returned nil")
}
}
})
Upvotes: 2