2017-08-03 82 views
0

我試圖將多個值保存到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.如果它有助於任何人更好地理解,我正在嘗試製作一個包含所有用戶的名字或用戶名以及他們的觀點的公共排行榜。

回答

1

您正在創建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") 
    } 
} 
相關問題