我正在使用搜索视图控制器:
在此图像中,您可以看到它具有表格视图,search_textfiled和高级搜索按钮。因此,如果我在搜索字段中放入一些文本,然后单击搜索图标,它就会触发查询,并在表中填充结果。但是,当单击“高级搜索”时,它用来打开一个弹出窗口,其中有一些text_field。
因此,在所有字段中输入值后,我必须进行搜索和激发查询,并填充“搜索”视图控制器中存在的表视图。因此,当单击搜索时,我正在调用full_text_search函数,该函数用于触发查询并在表视图中填充数据。因此在popover控制器中创建搜索控制器的实例并调用搜索功能,但它显示线程异常。
func full_text_search(){
self.view.endEditing(true)
image_contain.removeAll()
datafiles.removeAll()
search_table.reloadData()
search_table.delegate = self
search_table.dataSource = self
let defaults = UserDefaults.standard
let username = defaults.string(forKey: "username")
let password = defaults.string(forKey: "password")
var check_icon_flag = 0
let loginData = String(format: "%@:%@", username!, password!).data(using: String.Encoding.utf8)!
let base64LoginData = loginData.base64EncodedString()
let serarchbar_text = search_text.text
print(serarchbar_text)
var new_String = "http://xx.xxxx.com:9090/dtm-rest/repositories/xxx/search?q='"
new_String.append(serarchbar_text!+"'&object-type=dm_document")
let again_new_String = new_String.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
let url = URL(string: again_new_String!)
print(again_new_String)
var request = URLRequest(url: url!)
request.httpMethod = "GET"
request.setValue("Basic \(base64LoginData)", forHTTPHeaderField: "Authorization")
##After this use to fetch query result and at last i use refresh table data
因此在上面的代码中,它用于显示
中的线程异常search_table.reloadData
search_table.delegate =自我
search_table.dataSource =自我
如果我从搜索控制器调用此函数,则它工作正常。该函数仅在搜索控制器中定义。但是从popover控制器调用会产生异常。下面的函数显示从popover视图控制器调用full_text_search函数。
@IBAction func Search(_ sender: Any) {
DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
print("2sec")
let check_search = SearchViewController()
check_search.full_text_search()
}
removeAnimate()
}
如果要添加一些值以使用弹出窗口视图进行查询然后进行搜索,该怎么办。
我怎么称呼popover:
@IBAction func advance_search(_ sender: Any) {
let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "types_popover") as! TypesViewController
self.addChildViewController(popOverVC)
popOverVC.view.frame = self.view.frame
self.view.addSubview(popOverVC.view)
popOverVC.didMove(toParentViewController: self)
}
答案 0 :(得分:0)
与其从另一个VC填充tableView,不如使用委托将其填充到其自己的VC中,详细了解委托
因此在popover VC中,您传递了搜索所需的参数,并在tableview VC中启动了一个函数,并执行了非常简单的搜索
在您的情况下,委托协议功能应包含所有必需的搜索参数