我試圖通過使用使用MKLocalSearchCompleter
的本機模塊在React Native應用程序中實現地址完成。這是一個簡單的類,使用直接的委託方法,但我似乎無法從我的應用程序獲得結果。即使運行相關的單元測試也不行,我不知道爲什麼。iOS MapKit CompleterDidUpdateResults未調用
最新情況是,我將.queryFragment
屬性設置爲我的部分字符串,該字符串應自動啓動搜索,以通知委託人何時完成或是否有錯誤。在提出請求之前,我正確設置了代理,但我的代理completerDidUpdateResults(_ completer: MKLocalSearchCompleter)
或completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error)
方法從未被調用。
.isSearching
屬性初始化後設置爲false,當我設置.queryFragment
變爲true時,所以它似乎在內部工作。如果我創建一個新項目並拖動到完全相同的類和單元測試中,測試運行良好,並且我得到的結果沒有問題,測試在大約0.25秒內完成,但在我的實際應用程序項目中,測試命中了30秒超時並在我得到答覆之前失敗。
唯一的其他問題,我能找到的這個問題是一個蘋果開發者論壇問題解釋從九月
我沒有迴應相同的情況下這是我的代碼和測試:
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)
}
}