未调用 iOS MapKit completerDidUpdateResults
Posted
技术标签:
【中文标题】未调用 iOS MapKit completerDidUpdateResults【英文标题】:iOS MapKit completerDidUpdateResults not called 【发布时间】:2017-03-28 20:55:00 【问题描述】:我正在尝试通过使用使用 MKLocalSearchCompleter
的本机模块在 React Native 应用程序中实现地址完成。这是一个足够简单的类,具有直接的委托方法,但我似乎无法从我的应用程序中获得结果。即使运行相关的单元测试也不起作用,我不知道为什么。
发生的事情是我将.queryFragment
属性设置为我的部分字符串,这应该会自动启动搜索,当搜索完成或出现错误时通知我的委托。我在发出请求之前适当地设置了委托,但我的委托 completerDidUpdateResults(_ completer: MKLocalSearchCompleter)
或 completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error)
方法永远不会被调用。
.isSearching
属性在初始化后设置为 false,当我设置 .queryFragment
时变为 true,所以它似乎在内部工作。如果我创建一个新项目并拖入完全相同的类和单元测试,则测试运行良好,我的结果没有问题,测试在 ~0.25 秒内完成,但在我的实际应用程序项目中,测试达到 30 秒超时在我得到回应之前失败了。
我能找到的关于这个问题的唯一其他问题是一个 Apple Developer Forum 问题,它解释了我的相同情况,但从 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)
【问题讨论】:
【参考方案1】:在玩了几天之后,我能够让它工作,但它似乎与测试本身有关,而不是与实际的 API 或实现有关。我想测试驱动的开发就这么多了。问题是我们的测试目标是单独添加的,并且是作为具有自己方案的单独目标运行的,而不是使用主方案中的“测试”配置。不完全确定为什么会有所作为,但如果您像我一样被困在这个问题上,这是我最好的建议。
【讨论】:
以上是关于未调用 iOS MapKit completerDidUpdateResults的主要内容,如果未能解决你的问题,请参考以下文章