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)
我有一个应用程序可以通过 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)