У меня есть контроллер поиска:
См. Это изображение .
На этом изображении вы можете увидеть таблицу, search_textfiled и кнопку расширенного поиска. Поэтому, если я помещу какой-нибудь текст в поле поиска и нажму на значок поиска, он использует его для запуска запроса, и он заполняет результат в таблице. Но при нажатии на расширенный поиск он используется для открытия одного всплывающего окна с некоторым полем text_.
См. Это изображение для Popover .
Таким образом, после ввода значения во все поля мне нужно выполнить запрос поиска и запуска и заполнить табличное представление, присутствующее в контроллере представления поиска. Поэтому, нажимая на поиск, я вызываю ту функцию 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 = self
search_table.dataSource = self
Если я вызываю эту функцию из контроллера поиска, она работает нормально. Эта функция определена только в контроллере поиска. Но при вызове из контроллера поповера это исключение. Функция ниже показывает вызов функции 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)
}