2017-08-03 19 views
0

CloudKit(名前、ユーザー名、ポイント)に複数の値を保存しようとしています。しかし、私はそれらを保存するとき、彼らはのようなので、異なる3行に分けて保存します。CloudKitの同じrecordName行に複数のフィールドを追加する

enter image description here

私は名、ユーザ名を組み合わせたい、と私はそれらを一緒にロードすることができるように1行にフィールドを指します。ここで

は私節約コードです:

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つのフィールド、それぞれ異なるフィールドを設定しています。代わりに、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") 
    } 
} 
関連する問題