gpt4 book ai didi

iOS MapKit CompleterDidUpdateResults 未调用

转载 作者:行者123 更新时间:2023-11-30 12:34:08 26 4
gpt4 key购买 nike

我正在尝试通过使用使用 MKLocalSearchCompleter 的 native 模块在 React Native 应用程序中实现地址补全。这是一个足够简单的类,具有简单的委托(delegate)方法,但我似乎无法从我的应用程序中获得结果。即使运行相关的单元测试也不起作用,我不确定为什么。

发生的情况是,我将 .queryFragment 属性设置为我的部分字符串,这应该会自动启动搜索,并在搜索完成或出现错误时通知我的委托(delegate)。我在发出请求之前适本地设置了委托(delegate),但我的委托(delegate) completerDidUpdateResults(_completer: MKLocalSearchCompleter)completer(_completer: MKLocalSearchCompleter, didFailWithError error: Error) 方法永远不会得到已调用。

.isSearching 属性在初始化后设置为 false,当我设置 .queryFragment 时,它变为 true,因此它似乎在内部工作。如果我创建一个新项目并拖入完全相同的类和单元测试,则测试运行良好,并且没有任何问题地得到结果,并且测试在 ~0.25 秒内完成,但在我的实际应用程序项目中,测试达到 30 秒超时在我得到回复之前就失败了。

关于这个问题,我能找到的唯一其他问题是苹果开发者论坛的一个问题,解释了我的相同情况,但 9 月份没有回复

这是我的代码和测试:

class AddressUtils: NSObject, MKLocalSearchCompleterDelegate {

let searchCompleter = MKLocalSearchCompleter()
var results: [MKLocalSearchCompletion]?
var onSuggestionsReceived: (([String]) -> Void)?

public override init() {
super.init()
searchCompleter.delegate = self
}

public func getAddressSuggestions(address: String!, completion: @escaping ([String]) -> Void) {
self.onSuggestionsReceived = completion
searchCompleter.queryFragment = address
if searchCompleter.isSearching {
print("Searching") // Prints
}
}

func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
self.results = completer.results
let results = completer.results.flatMap { (result) -> String? in
return result.title + " " + result.subtitle
}
onSuggestionsReceived?(results)
}

func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) {
onSuggestionsReceived?([])
}

}

class UtilityTests: XCTestCase {

func testAddressAutocomplete() {
let expectation = self.expectation(description: "Perform search")
let query = "11 Farns"
let utils = AddressUtils()
utils.getAddressSuggestions(address: query) { (results) in
expectation.fulfill()
}
wait(for: [expectation], timeout: 30)
}

}

最佳答案

不确定您是否解决了这个问题,但我也遇到了同样的问题。通过确保仅设置 queryFragment 而不是主线程来设法修复。

private let completer: MKLocalSearchCompleter

DispatchQueue.main.async { [weak self] in
self?.completer.queryFragment = newValue
}

关于iOS MapKit CompleterDidUpdateResults 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43079766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com