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