Как загрузить данные в табличном представлении из базы данных Sqlite и состояние UISwitch в соответствии с состоянием сохранения в базе данных - PullRequest
0 голосов
/ 17 октября 2019

Я хочу загрузить данные в TableView из базы данных (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 Ответ

1 голос
/ 17 октября 2019

1-) Извлечение данных из базы данных в tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) метод делегата на самом деле очень дорогой, так как он будет вызываться много раз, особенно когда пользователь выполняет прокрутку, это снижает производительность ваших приложений, общее решение заключается в извлечении данных в viewDidLoadсохраните его в элементе viewcontrollers и используйте его при необходимости.

2-) if lockArray.isEmpty == true и else блоки Первые 3 строки одинаковы, поэтому вы можете переместить их ниже этих блоков.

и не могли бы вы уточнить свой вопрос, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...