- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试实现一个搜索栏,用户可以在其中输入字符串并搜索地址或公司。
为了寻找企业,我使用 Yelp API 外包我需要的信息。
为了查找地址,我使用 Apple 的 MKLocalSearch
API 来获取我需要的信息。
但是,我确实有一个问题。当我按住退格键以清除搜索栏中的文本或在搜索栏中输入的速度过快时,我收到了 MKErrorDomain
错误:
操作无法完成。 (MKErrorDomain 错误 3.)
当我收到此错误时,我将不得不等待片刻,以便代码再次运行并从 API 检索信息。
下面的代码是我必须实现我正在寻找的东西:
这是搜索栏委托(delegate)方法:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text == "" {
addServiceCellToTableView()
loadSearchHistory()
return
} else if searchBar.text != "" {
removeServiceCellFromTableView()
}
if searchCompleter.isSearching{
searchCompleter.cancel()
searchCompleter.region = (delegate?.businessSearchResultTableViewControllerNeedsUpdatedMapRegion(self))!
searchCompleter.queryFragment = searchText
} else {
searchCompleter.region = (delegate?.businessSearchResultTableViewControllerNeedsUpdatedMapRegion(self))!
searchCompleter.queryFragment = searchText
}
}
我使用 MKLocalSearchCompleter
根据用户在搜索栏中输入的内容获取建议:
func completerDidUpdateResults(_ completer: MKLocalSearchCompleter){
guard completer.results.count != 0 else {return}
var searchTerm: String = completer.results.first!.title
if completer.results.first!.subtitle != "" {
searchTerm = searchTerm + ", " + completer.results.first!.subtitle
}
if let _ = addressDetector.firstMatch(in: searchTerm, options: [], range: NSMakeRange(0, searchTerm.utf8.count)){
searchAddress(for: searchTerm)
} else {
getBusinesses(withSearchTerm: searchTerm, userCoordinates: currentUserLocation.coordinate)
}
}
在上面的代码中,我使用 NSDataDetector
来查看建议的文本是否是地址...如果是,我将其输入 MKLocalSearch
...
最后,为了搜索地址,我定义了一个名为 searchAddress(for:)
的方法:
func searchAddress(for string: String){
let localSearchRequest = MKLocalSearchRequest()
localSearchRequest.naturalLanguageQuery = string
localSearchRequest.region = (delegate?.businessSearchResultTableViewControllerNeedsUpdatedMapRegion(self))!
let localSearch = MKLocalSearch(request: localSearchRequest)
localSearch.start(completionHandler: {searchResponse, error in
guard error == nil else {
print(error.debugDescription)
return
}
guard let mapItems = searchResponse?.mapItems else {return}
self.tableViewDataSourceList = mapItems
self.tableView.reloadData()
self.delegate?.businessSearchResultTableViewStopedGettingBusiness(self, with: self.tableViewDataSourceList, at: CLLocationCoordinate2D(latitude: self.currentUserLocation.coordinate.latitude, longitude: self.currentUserLocation.coordinate.longitude))
})
}
当我打字太快或按住退格键时,我在控制台中收到以下错误:
The operation couldn’t be completed. (MKErrorDomain error 3.)
The operation couldn’t be completed. (MKErrorDomain error 3.)
The operation couldn’t be completed. (MKErrorDomain error 3.)
The operation couldn’t be completed. (MKErrorDomain error 3.)
The operation couldn’t be completed. (MKErrorDomain error 3.)
The operation couldn’t be completed. (MKErrorDomain error 3.)
The operation couldn’t be completed. (MKErrorDomain error 3.)
The operation couldn’t be completed. (MKErrorDomain error 3.)
任何帮助将不胜感激:-)
最佳答案
您在这里看到的是 MKError.loadingThrottled
错误。您将不得不延迟发送给 Apple 的请求。
您可以通过在每次用户更新搜索查询时重新启动计时器来实现。您可以通过延长计时器的长度来调整对 API 执行 ping 操作的频率。通过在每次更新查询时重置计时器,可以避免在字符快速变化时发送多个请求。
// declare and store Timer somewhere
func searchAddress(with query: String) {
}
func timerDidFire(_ sender: Any) {
let query = textField.text
searchAddress(with: query)
}
Timer.scheduledTimerWithTimeInterval(0.5, target: self, selector: #selector(timerDidFire), userInfo: nil, repeats: false)
关于ios - 为什么在进行本地搜索时会出现 MKErrorDomain 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47688976/
我正在尝试实现一个搜索栏,用户可以在其中输入字符串并搜索地址或公司。 为了寻找企业,我使用 Yelp API 外包我需要的信息。 为了查找地址,我使用 Apple 的 MKLocalSearch AP
当我运行我正在构建的 GPS 应用程序时,我不断随机收到此消息。它不会每次都会发生,并且传入的坐标始终有效(我记录它们)。有这些地方的文档吗? 编辑: CLLocationCoordinate2D c
我在使用我不理解的 MKDirections.calculate() 方法时收到一条错误消息。 我查看了 Apple 的文档,但没有提及。我也用谷歌搜索过,但仍然没有答案。 最佳答案 看起来像 MKE
我正在尝试使用 MapKit 路线请求获取两个坐标之间的交通路线。 当我切换到其他(非 Transit)类型时,下面的代码可以工作,但是当我切换到 Transit 时,它会抛出一个错误,这个错误在 A
我是一名优秀的程序员,十分优秀!