UITableView 单元格未填充 CloudKit 数据

UITableView cells not populating with CloudKit data

我有一个应用程序可以通过 CloudKit 保存一组随机生成的 5 种颜色。它们保存在字符串字段类型(列表)下。我能够成功地保存和检索颜色。

在我的应用程序中,我想在不同的行上显示带有颜色数组的每条记录。目前,检索数据时会显示正确的行数,但只有第一行有颜色数组(下面的屏幕截图)。当我下拉 table 时,它会刷新行并显示已保存的不同颜色数组。

import UIKit
import CloudKit

class FavoritesController: UIViewController, UITableViewDataSource {

let paletteController = PaletteController()
    let favoritesTableView = UITableView()
    let reuseIdentifier = "favoritesCell"

    let privateDatabase = CKContainer.default().privateCloudDatabase
    var retrieveFavoritePalette: [CKRecord] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        setupTableView()
        queryDatabase()
    }

    func setupTableView() {
        favoritesTableView.dataSource = self
        favoritesTableView.delegate = self
        favoritesTableView.register(UITableViewCell.self, forCellReuseIdentifier: reuseIdentifier)

        let heightOfCells: CGFloat = 100
        favoritesTableView.rowHeight = heightOfCells


        view.addSubview(favoritesTableView)
        favoritesTableView.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor)
    }

    func queryDatabase() {
        let query = CKQuery(recordType: "Favorite", predicate: NSPredicate(value: true))
        privateDatabase.perform(query, inZoneWith: nil) { (records, error) in
            if error == nil {
                print("Record retrieved")

                for record in records! {
                    self.retrieveFavoritePalette.append(record)
                }
            } else {
                print("Record not retrieved: \(String(describing: error))")
            }
            let sortedRecords = records?.sorted(by: { [=11=].creationDate! > .creationDate! })
            self.retrieveFavoritePalette = sortedRecords ?? []
            DispatchQueue.main.async {
                self.favoritesTableView.reloadData()
            }
        }
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return retrieveFavoritePalette.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath)
        let paletteRecord: CKRecord = retrieveFavoritePalette[indexPath.row]
        var individualColorView: [UIView] = []
//        print(paletteRecord.value(forKey: "FavoritePalette"))

        let line = paletteRecord.value(forKey: "FavoritePalette") as? [String] ?? []

     //Creates the individual boxes where the color goes
        for i in 0..<5 {
            let xAxis = i * 20
            let individualView = UIView(frame: CGRect(x: xAxis, y: 0, width: 20, height: 80))
            individualColorView.append(individualView)
        }

        for j in 0..<line.count {
            let allColorsView = individualColorView[j]

            print(individualColorView[j])
            allColorsView.backgroundColor = UIColor(hexString: line[j])

            tableView.addSubview(allColorsView)
        }

        cell.selectionStyle = .none
        return cell
    }
}

我尝试将 let paletteRecord...tableView.addSubview(allColorsView) 放入 TableViewCell class,但是当我不知道如何在没有 [=14= 的情况下编译代码时,我卡住了] 在 let paletteRecord: CKRecord = retrieveFavoritePalette[indexPath.row].

print(paletteRecord.value(forKey: "FavoritePalette")) 的输出是 Optional(<__NSArrayM 0x6000039f98f0>( BBBB88, CCC68D, EEDD99, EEC290, EEAA88 ))

这是目前的样子。我需要每一行显示保存到 CloudKit 的字符串数组。

保存到 CloudKit 的数据

感谢任何帮助!

我认为你的问题出在这条线上:

tableView.addSubview(allColorsView)

您正在将颜色框添加到 tableView,但您可能打算像这样将它们添加到单元格本身:

cell.addSubview(allColorsView)