如何从Sqlite数据库中的表视图中加载数据,UISwitch的状态根据数据库中的保存状态

时间:2019-10-17 12:06:20

标签: swift swift4

我想根据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)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

1-)使用tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)委托方法从数据库中获取数据实际上是非常昂贵的,因为它将被调用很多次,尤其是在用户滚动时,这会破坏应用程序的性能,常见的解决方案是在{ {1}}将其存储在viewcontrollers成员中,并在需要时使用它。

2-)viewDidLoadif lockArray.isEmpty == true块的前三行相同,因此您可以将其移动到这些块下方。

您能澄清您的问题吗?