如何从我的过滤列表中删除单元格?

我有一个列表,我想单击一行以删除此行。 所以我有一张桌子。 tableView中的数据来自mysql数据库(我使用本教程访问数据库https://codewithchris.com/iphone-app-connect-to-mysql-database/)。我添加了一个UISearchBar来过滤列表。如果我不使用搜索栏,那么一切正常,但是如果使用它,则无法删除/删除原始文件。

我尝试对搜索栏使用代码,但出现错误无法将类型'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.*********,handler: { (action: UIAlertaction!) in                    self.dataAdd.append((self.idetablissement,1))
            type***** = 1
        self.registerNew*****(nom*****: self.selected*****.nom*****!,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中删除数据。我之前和之后的行数不一样...

drakeson 回答:如何从我的过滤列表中删除单元格?

您将从不获得NSMutableArray的胁迫。

基本上根本不使用Swift中的NS(Mutable)..集合类型。使用原生类型

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

这些数组是免费可变的。顺便说一下,*****Model不会编译。

然后您可以写很多 swiftier

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

本文链接:https://www.f2er.com/3158587.html

大家都在问