2017-08-03 2 views
0

Ich versuche, mehrere Werte in CloudKit (Name, Benutzername, Punkte) zu speichern. Allerdings, wenn ich sie retten, sie sparen separat in drei verschiedenen Reihen, etwa so:Hinzufügen von mehreren Feldern zu derselben RecordName-Zeile in CloudKit

enter image description here

ich den Namen, Benutzernamen kombinieren möchten, und Punkte Felder in einer Reihe, so kann ich sie zusammen laden.

Hier ist mein Sparcode:

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") 
    } 
} 

Kann jemand bitte zeigen, wie diese Datensätze speichern zusammen statt getrennt?

Zusammen mit, dass ich zur Zeit separat laden sie, wenn sie zusammen sein sollte ... Laden Code:

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() 

     } 
    } 
} 

ich meine Daten zur Gruppe der Speicherung und Ladevorgang beide suchen in zusammen.

P.S. Wenn es jemandem hilft, es besser zu verstehen, versuche ich eine öffentliche Bestenliste zu erstellen, die alle Namen oder Benutzernamen der Benutzer und ihre Punkte enthält.

Antwort

1

Sie erstellen 3 separate Datensätze und legen jeweils ein Feld, ein anderes Feld, fest. Erstellen Sie stattdessen einfach 1 Datensatz und setzen Sie alle 3 Felder darauf. Versuchen Sie etwas wie das (ich bin nicht wirklich auf dem neuesten Stand auf SWIFT, so müssen Sie möglicherweise mit der Syntax ein wenig zu spielen)

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") 
    } 
} 
Verwandte Themen