将多个字段添加到CloudKit中的同一个recordName行

问题描述:

我试图将多个值保存到CloudKit(名称,用户名,点)。然而,当我救他们,他们分别在3点不同的行保存,就像这样:将多个字段添加到CloudKit中的同一个recordName行

enter image description here

我想要的名称,用户名结合起来,并指出领域成一排,所以我可以加载它们在一起。

这里是我的保存代码:

func saveToCloud(){ 
    let newName = CKRecord(recordType: "LeaderboardInfo") 
    newName.setValue(firstName, forKey: "Name") 
     database.save(newName) { (record, error) in 
     guard record != nil else { return } 
     print("saved record") 
    } 
    let newUsername = CKRecord(recordType: "LeaderboardInfo") 
    newUsername.setValue(username, forKey: "Username") 

    database.save(newUsername) { (record, error) in 
     guard record != nil else { return } 
     print("saved record") 
    } 
    let pointsCount = CKRecord(recordType: "LeaderboardInfo") 
    pointsEarned = Int(arc4random_uniform(UInt32(50))) 
    pointsCount.setValue(pointsEarned, forKey: "Points") 

    database.save(pointsCount) { (record, error) in 
     guard record != nil else { return } 
     print("saved record") 
    } 
} 

可有人请演示如何将这些记录保存在一起,而不是分开?

伴随着的是,我目前单独加载它们时,它应该在一起...... 加载代码:

func queryDatabase() { 
    // Name 
    let query = CKQuery(recordType: "LeaderboardInfo", predicate: NSPredicate(value: true)) 
    database.perform(query, inZoneWith: nil) { (records, _) in 
     guard let records = records else { return } 
     let sortedRecords = records.sorted(by: { $0.creationDate! > $1.creationDate! }) 
     self.names = sortedRecords 
     DispatchQueue.main.async { 
      // self.tableView.refreshControl?.endRefreshing() 
       self.tableView.reloadData() 
     } 
    } 
    // Username 
    let query2 = CKQuery(recordType: "LeaderboardInfo", predicate: NSPredicate(value: true)) 
    database.perform(query2, inZoneWith: nil) { (records, _) in 
     guard let records = records else { return } 
     let sortedRecords = records.sorted(by: { $0.creationDate! > $1.creationDate! }) 
     self.usernames = sortedRecords 
     DispatchQueue.main.async { 
      // self.tableView.refreshControl?.endRefreshing() 
       self.tableView.reloadData() 
     } 
    } 
    // Points 
    let query3 = CKQuery(recordType: "LeaderboardInfo", predicate: NSPredicate(value: true)) 
    database.perform(query3, inZoneWith: nil) { (records, _) in 
     guard let records = records else { return } 
     let sortedRecords = records.sorted(by: { $0.creationDate! > $1.creationDate! }) 
     self.points = sortedRecords 
     DispatchQueue.main.async { 
      // self.tableView.refreshControl?.endRefreshing() 
       self.tableView.reloadData() 

     } 
    } 
} 

我一起期待组中保存和加载的过程我的两个数据。

P.S.如果它有助于任何人更好地理解,我正在尝试制作一个包含所有用户的名字或用户名以及他们的观点的公共排行榜。

您正在创建3个单独的记录,并在每个记录上设置一个字段,一个不同的字段。相反,只需创建1条记录并在其上设置全部3个字段。尝试类似这样的事情(我并不真的在SWIFT上加快速度,因此您可能必须稍微玩一下语法)

func saveToCloud() 
{ 
    let newRecord = CKRecord(recordType: "LeaderboardInfo") 

    newRecord.setValue(firstName, forKey: "Name") 
    newRecord.setValue(username, forKey: "Username") 

    pointsEarned = Int(arc4random_uniform(UInt32(50))) 
    newRecord.setValue(pointsEarned, forKey: "Points") 

    database.save(newRecord) { (record, error) in 
     guard record != nil else { return } 
     print("saved record") 
    } 
}