Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何从我的筛选列表中删除单元格?_Swift_Xcode - Fatal编程技术网

Swift 如何从我的筛选列表中删除单元格?

Swift 如何从我的筛选列表中删除单元格?,swift,xcode,Swift,Xcode,我有一个列表,我想点击一行删除这一行。 所以我有一个桌面视图。tableView中的数据来自mysql数据库(我使用本教程访问数据库)。我添加了一个UISearchBar来过滤列表。如果我不使用搜索栏,一切都可以,但如果我使用它,我无法删除/删除原始数据 我试图为搜索栏使用代码,但出现错误,无法将“Swift.\u ContiguousArrayStorage”(0x1e91fbcc8)类型的值强制转换为“NSMutableArray” var feedItems: NSArray = NSAr

我有一个列表,我想点击一行删除这一行。 所以我有一个桌面视图。tableView中的数据来自mysql数据库(我使用本教程访问数据库)。我添加了一个UISearchBar来过滤列表。如果我不使用搜索栏,一切都可以,但如果我使用它,我无法删除/删除原始数据

我试图为搜索栏使用代码,但出现错误,无法将“Swift.\u 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中删除数据。我之前和之后的行数有问题,不一样…

在强制中,您将永远无法获得
NSMutableArray

基本上不在Swift中使用
NS(可变)
集合类型。使用本机类型

var feedItems = [Model]()
var filtered*****s = [Model]()
这些数组是免费可变的。顺便说一下,
****模型
无论如何都不会编译

那你就可以写得更快了


这种语法很糟糕(我不是说*******)

使用本机
模型
可以将行减少到

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


不要在
deleteRows

您用最差字符编辑了变量和模型名称之后立即调用
reloadData
。下次就用Foo或其他东西来代替它。你还强制展开和强制强制转换所有内容,最终会崩溃。@EmilioPelaez你说的“使用Foo或其他东西”是什么意思?
filteredFoos
是可读的,
filtered****s
不是,这使得代码更难扫描。他们都会编辑你的敏感信息。好的!我的代码中不使用字符*。这只是因为我不想把我的项目暴露给每个人,非常感谢你。如果我使用了NS集合类型,它来自问题开始时的链接。在这个项目之前,我不知道xcode和swift。在我今天下午的搜索中,我发现NS不是“快速的”。我现在将更改所有的NS…有一个错误。。。当我使用Ented列表时,我的应用程序正在崩溃,并在更新前后显示“0部分中的行数无效…”的数字或原始值之间的差异。
filtered*****s = feedItems.filter { ($0 as! *****Model).nom*****!.lowercased().contains(searchList.text!.lowercased()) } as! [*****Model] as NSArray
filtered*****s = feedItems.filter { $0.nom*****!.range(of: searchText, options: .caseInsensitive) != nil }