UITableView 单元格未填充 CloudKit 数据
Posted
技术标签:
【中文标题】UITableView 单元格未填充 CloudKit 数据【英文标题】:UITableView cells not populating with CloudKit data 【发布时间】:2020-06-11 15:53:08 【问题描述】:我有一个应用程序,它通过 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 的字符串数组。
保存到 CloudKit 的数据
感谢任何帮助!
【问题讨论】:
【参考方案1】:我认为您的问题在这一行:
tableView.addSubview(allColorsView)
您正在将颜色框添加到 tableView
,但您可能打算像这样将它们添加到单元格本身:
cell.addSubview(allColorsView)
【讨论】:
以上是关于UITableView 单元格未填充 CloudKit 数据的主要内容,如果未能解决你的问题,请参考以下文章