Как удалить ячейку из моего отфильтрованного списка? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть список, и я хочу нажать на строку, чтобы удалить эту строку. Итак, у меня есть таблица. Данные в tableView поступают из базы данных mysql (я использовал это руководство для доступа к базе данных https://codewithchris.com/iphone-app-connect-to-mysql-database/).. Я добавил UISearchBar для фильтрации списка. Все нормально, если я не использую панель поиска, но если я ее использую, я могуне удаляю / удаляю raw.

Я пытался использовать код для панели поиска, но у меня возникла ошибка. Не удалось привести значение типа 'Swift._ContiguousArrayStorage <*******. *****Модель> '(от 0x1e91fbcc8) до' NSMutableArray '

var feedItems: NSArray = NSArray()  
var filtered*****s: NSArray = NSArray()

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    selected***** = (filtered*****s[indexPath.row] as! *****Model)

    var type***** : Int = 0

    let alertController1 = UIAlertController(title: selected*****.nom*****, message: Constants.choose_type_*****, preferredStyle: .alert)
    alertController1.addAction(UIAlertAction(title: Constants.*******, style: .default, handler: { (action: UIAlertAction!) in
        self.dataAdd.append((self.idEtablissement,self.selected*****.id*****!,0))
            type***** = 0
        self.registerNew*****(nom*****: self.selected*****.nom*****!, id*****: self.selected*****.id*****!, type*****: type*****)

    }))
    alertController1.addAction(UIAlertAction(title: Constants.*********, style: .default, handler: { (action: UIAlertAction!) in                    self.dataAdd.append((self.idEtablissement,self.selected*****.id*****!,1))
            type***** = 1
        self.registerNew*****(nom*****: self.selected*****.nom*****!, id*****: self.selected*****.id*****!, type*****: type*****)

    }))

    self.present(alertController1, animated: true, completion: nil)

    if (isSearch == false){

        let test1 = self.filtered*****s as! NSMutableArray
        test1.removeObject(at: indexPath.row)

        Liste*****.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)

        self.Liste*****.reloadData()

    } else {

        let test1 = self.filtered*****s as! NSMutableArray
        test1.removeObject(at: indexPath.row)

    }

func searchBar(_ searchList: UISearchBar, textDidChange searchText: String) {
    if searchList.text! == "" {
        filtered*****s = feedItems
        isSearch = false
    } else {

        filtered*****s = feedItems.filter { ($0 as! *****Model).nom*****!.lowercased().contains(searchList.text!.lowercased()) } as! [*****Model] as NSArray
        isSearch = true
    }

    self.Liste*****.reloadData()
}

}

Есть ли у вас какие-либо идеи о коде для панели поиска? Я должен удалить ячейку в данных, но в моем случае у меня есть два данных: отфильтрованныеи не фильтруется. Я должен удалить данные из tableView. У меня была проблема с номером строки до и после которого не то же самое ...

1 Ответ

0 голосов
/ 05 ноября 2019

Вы никогда не получите NSMutableArray принуждения.

В Swift вообще не используются типы коллекций NS(Mutable)... Используйте нативные типы

var feedItems = [Model]()
var filtered*****s = [Model]()

. Эти массивы могут изменяться бесплатно. Кстати, *****Model не компилируется в любом случае.

Тогда вы можете написать много быстрее

if isSearch {
    self.filtered*****s.remove(at: indexPath.row)
} else {
    self.feedItems.remove(at: indexPath.row)
}
tableView.deleteRows(at: [indexPath], with: .automatic)

И этот синтаксис ужасен (я не понимаюне означает ******)

filtered*****s = feedItems.filter { ($0 as! *****Model).nom*****!.lowercased().contains(searchList.text!.lowercased()) } as! [*****Model] as NSArray

с собственным Model линия может быть уменьшена до

filtered*****s = feedItems.filter { $0.nom*****!.range(of: searchText, options: .caseInsensitive) != nil }

И никогда не вызывать reloadData правильнопосле deleteRows.

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