MKLocalSearchCompleter 不能在物理设备上工作,但在模拟器上工作正常
Posted
技术标签:
【中文标题】MKLocalSearchCompleter 不能在物理设备上工作,但在模拟器上工作正常【英文标题】:MKLocalSearchCompleter not working on physical device but works fine on simulator 【发布时间】:2020-04-17 09:03:43 【问题描述】:我的应用遇到了非常奇怪的问题。当我在模拟器上运行 MKLocalSearchCompleter 请求时,它工作正常,调用了委托方法并且一切运行顺利。
但是,在物理设备上尝试时,不再调用委托方法(didUpdateResults(_ :) 和 didFailWithError(_ :) 都没有)
我尝试在一个全新的项目上测试相同的实现;相同的行为。
当我使用 CLGeocoder 对地址进行地理编码时,它在物理和模拟器上都可以正常工作。
我的网络非常好,其他所有网络任务都运行良好。
我的实现非常基础:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
let searchCompleter = MKLocalSearchCompleter()
searchCompleter.delegate = self
searchCompleter.queryFragment = searchBar.text!
func completerDidUpdateResults(_ completer: MKLocalSearchCompleter)
print(completer.results)
searchQueryResults = [MKLocalSearchCompletion]()
completer.results.forEach (result) in
self.searchQueryResults!.append(result)
researchTable.alpha = 1.0
researchTable.reloadData()
func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error)
print(error)
真的,我一直在寻找一段时间,但无法找到答案;非常感谢您帮助我!
【问题讨论】:
【参考方案1】:我不知道它是否有效,但它只是为你暗示。
只需在您的 UIViewController 中全局定义 let searchCompleter = MKLocalSearchCompleter()
。
写下面的语句viewDidLoad
方法而不是委托方法。
let searchCompleter = MKLocalSearchCompleter()
searchCompleter.delegate = self
我过去在与UIImagePickerController
合作时处理过相同类型的问题。它对我有用。
谢谢!
【讨论】:
哇超级奇怪...为什么模拟器和设备之间的行为不同?无论如何,非常感谢您的帮助;) 据我所知,这与设备或模拟器无关,这是 ios 11 及更高版本的问题。如果不再需要,ARC 会自动释放本地实例。在 iOS 9.0 中可以使用相同的代码。很高兴听到我的回答对您有帮助!谢谢你,快乐编码以上是关于MKLocalSearchCompleter 不能在物理设备上工作,但在模拟器上工作正常的主要内容,如果未能解决你的问题,请参考以下文章
未调用 iOS MapKit completerDidUpdateResults
iOS9.3中如何从MKLocalSearchCompletion对象中识别MKMapItem?
MKLocalSearch 产生 SearchAttribution Error 和 Error Domain=GEOErrorDomain Code=-8