iOS MKLocalSearch导致崩溃[重复]
Posted
技术标签:
【中文标题】iOS MKLocalSearch导致崩溃[重复]【英文标题】:iOS MKLocalSearch causing crash [duplicate] 【发布时间】:2020-09-03 13:11:55 【问题描述】:我正在使用 UISearchBar 和 UITableView 执行 MKLocalSearch。
第一次搜索总是很有效,但如果您尝试另一个搜索,应用程序会崩溃,并且我会收到“索引超出范围错误”。如果您需要更多信息,请告诉我,谢谢。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
self.searchResults = [] //this might be causing the crash
print("searchText \(searchText)")
let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = searchText
let search = MKLocalSearch(request: searchRequest)
search.start response, error in
guard let response = response else
print("Error: \(error?.localizedDescription ?? "Unknown error").")
return
for item in response.mapItems
self.searchResults.append(item.placemark)
self.tableView.reloadData()
//MARK: TableView
extension LocationSearchViewController: UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return searchResults.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "ResultCell", for: indexPath)
let listItem = searchResults[indexPath.row]
cell.textLabel?.text = listItem.name
cell.detailTextLabel?.text = listItem.administrativeArea ?? ""
return cell
extension LocationSearchViewController: UITableViewDelegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
print("selected a row")
let local = searchResults[indexPath.row]
// pass local back
if let delegate = delegate
delegate.doSomethingWith(data: local)
dismiss(animated: true, completion: nil)
在第 3 次或第 4 次尝试搜索后,表中的结果保持不变,不再记录任何结果。我得到了错误:
错误:操作无法完成。 (MKErrorDomain 错误 3。)
【问题讨论】:
在异常崩溃时贴出全文 【参考方案1】:您的问题是您过早更改了 searchResults。试试:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
print("searchText \(searchText)")
let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = searchText
let search = MKLocalSearch(request: searchRequest)
search.start response, error in
guard let response = response else
print("Error: \(error?.localizedDescription ?? "Unknown error").")
return
var newArray: [YourStruct] = []
for item in response.mapItems
newArray.append(item.placemark)
self.searchResults = newArray
self.tableView.reloadData()
【讨论】:
好的,谢谢,它似乎不再崩溃,但在第 3 次或第 4 次尝试搜索后 - 表格视图结果没有改变,我得到:searchText Rale 错误:无法完成操作. (MKErrorDomain 错误 3。)。在控制台中。另外,如果我的问题现在不同,我会接受您的正确回答。顺便把 let newArray 改成 var,谢谢 Kstin!以上是关于iOS MKLocalSearch导致崩溃[重复]的主要内容,如果未能解决你的问题,请参考以下文章