我有一个应用程序,可通过 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.row
在 let paletteRecord: CKRecord = retrieveFavoritePalette[indexPath.row]
.
的输出 print(paletteRecord.value(forKey: "FavoritePalette"))
是 Optional(<__NSArrayM 0x6000039f98f0>( BBBB88, CCC68D, EEDD99, EEC290, EEAA88 ))
这就是它目前的样子。我需要每一行显示保存到 CloudKit 的字符串数组。
感谢任何帮助
我认为您的问题出在这一行。
tableView.addSubview(allColorsView)
您正在将颜色框添加到 tableView
但你可能是想把它们添加到单元格中,就像这样。
cell.addSubview(allColorsView)