UITableView单元格未填充CloudKit数据

问题描述 投票:0回答:1

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

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

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: { $0.creationDate! > $1.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类中,但当我想不出如何让代码在不使用 indexPath.rowlet paletteRecord: CKRecord = retrieveFavoritePalette[indexPath.row].

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

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

保存到 CloudKit 的数据enter image description here

感谢任何帮助

ios uitableview cloudkit
1个回答
1
投票

我认为您的问题出在这一行。

tableView.addSubview(allColorsView)

您正在将颜色框添加到 tableView但你可能是想把它们添加到单元格中,就像这样。

cell.addSubview(allColorsView)
© www.soinside.com 2019 - 2024. All rights reserved.