【问题标题】:MKLocalSearchCompleter not working on physical device but works fine on simulatorMKLocalSearchCompleter 不能在物理设备上工作,但在模拟器上工作正常
【发布时间】: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)
}

真的,我一直在寻找一段时间,但无法找到答案;非常感谢您帮助我!

【问题讨论】:

    标签: swift delegates mapkit geocoding core-location


    【解决方案1】:

    我不知道它是否有效,但它只是为你暗示。

    只需在您的 UIViewController 中全局定义 let searchCompleter = MKLocalSearchCompleter()

    写下面的语句viewDidLoad方法而不是委托方法。

     let searchCompleter = MKLocalSearchCompleter()
    
     searchCompleter.delegate = self
    

    我过去在与UIImagePickerController 合作时处理过相同类型的问题。它对我有用。

    谢谢!

    【讨论】:

    • 哇超级奇怪...为什么模拟器和设备之间的行为不同?无论如何,非常感谢您的帮助;)
    • 据我所知,这与设备或模拟器无关,这是 iOS 11 及更高版本的问题。如果不再需要,ARC 会自动释放本地实例。在 iOS 9.0 中可以使用相同的代码。很高兴听到我的回答对您有帮助!谢谢你,快乐编码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多