未调用iOS MapKit completerDidUpdateResults

未调用iOS MapKit completerDidUpdateResults,ios,swift,cocoa-touch,react-native,mapkit,Ios,Swift,Cocoa Touch,React Native,Mapkit,我试图通过使用使用MKLocalSearchCompleter的本机模块在React本机应用程序中实现地址完成。它是一个简单的类,具有简单的委托方法,但我似乎无法从我的应用程序中获得结果。即使运行相关的单元测试也不起作用,我不知道为什么 我将.queryFragment属性设置为我的部分字符串,这将自动启动搜索,在搜索完成或出现错误时通知我的代理。我在发出请求之前适当地设置了委托,但是我的委托completerDidUpdateResults(\uCompleter:MKLocalSearchC

我试图通过使用使用
MKLocalSearchCompleter
的本机模块在React本机应用程序中实现地址完成。它是一个简单的类,具有简单的委托方法,但我似乎无法从我的应用程序中获得结果。即使运行相关的单元测试也不起作用,我不知道为什么

我将
.queryFragment
属性设置为我的部分字符串,这将自动启动搜索,在搜索完成或出现错误时通知我的代理。我在发出请求之前适当地设置了委托,但是我的委托
completerDidUpdateResults(\uCompleter:MKLocalSearchCompleter)
completer(\uCompleter:MKLocalSearchCompleter,DidFailWitherError: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)
    }

}

在玩了几天之后,我就可以让它正常工作了,但它似乎与测试本身有关,而不是与实际的API或实现有关。我想测试驱动开发就到此为止了。问题在于,我们的测试目标是单独添加的,并且作为一个单独的目标运行,并具有自己的方案,而不是使用主方案中的“测试”配置。不完全清楚为什么会有不同,但如果你像我一样被困在这个问题上,这是我最好的建议