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

从联系人中选择自动填充地址后,iOS UITextField 文本字段为空

烦躁 当写日记了