我想根据TableView
中的保存状态(ON / OFF)从DataBase(SQlite)加载UISwitch
中的数据,并设置DataBase
状态。这是我的代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ParentalMovieTableViewCell", for: indexPath) as! ParentalMovieTableViewCell
let db = xxxDataBase()
lockArray = db.getLockInfo(catg: tabName)
if lockArray.isEmpty == true
{
cell.itemLbl.text = parentalMovieArray[indexPath.row]
cell.itemSwitch.isOn = true
cell.itemSwitch.tag = indexPath.row
cell.itemSwitch.addTarget(self, action: #selector(self.switchChanged(_sender:)), for: .valueChanged)
}
else
{
cell.itemLbl.text = parentalMovieArray[indexPath.row]
cell.itemSwitch.tag = indexPath.row
cell.itemSwitch.addTarget(self, action: #selector(self.switchChanged(_sender:)), for: .valueChanged)
for i in parentalMovieArray
{
for j in lockArray{
if i == j.item
{
cell.itemSwitch.isOn = true
}
else
{
cell.itemSwitch.isOn = false
}
}
}
}
@objc func switchChanged(_sender:UISwitch!)
{
// print("Table view switch changed\(_sender.tag)")
// print("The switch is\(_sender.isOn ? "ON" : "OFF")")
if _sender.isOn == false
{
print(_sender.tag)
var value = parentalMovieArray[_sender.tag]
print(value)
restrictMovieArray.append(value)
print(restrictMovieArray)
}
else if _sender.isOn == true
{
print(_sender.tag)
var value1 = parentalMovieArray[_sender.tag]
print(value1)
if let index = restrictMovieArray.index(of: value1) {
restrictMovieArray.remove(at: index)
print(restrictMovieArray)
}
}
}
答案 0 :(得分:1)
1-)使用tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
委托方法从数据库中获取数据实际上是非常昂贵的,因为它将被调用很多次,尤其是在用户滚动时,这会破坏应用程序的性能,常见的解决方案是在{ {1}}将其存储在viewcontrollers成员中,并在需要时使用它。
2-)viewDidLoad
和if lockArray.isEmpty == true
块的前三行相同,因此您可以将其移动到这些块下方。
您能澄清您的问题吗?